1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Übergeben/(Referenzieren) von XAML-Objekten in XAML

Dieses Thema im Forum ".NET WPF & Silverlight" wurde erstellt von Marschal, 17. Oktober 2013.

  1. Marschal

    Marschal Großer Enumerator

    Hallo nach langem wieder mal!

    Da ich bei meinem Problem einfach nciht fündig werde, stelle ich mein Problem mal hier im Forum vor.
    Vornweg, es handelt sich hier zwar hauptsächlich um ein Xaml/Xml Problem, dennoch hat dieser Ansatz mehr mit XAML selber (weniger mit WPF), und somit mit .Net zu tun, weshalb ich das Problem in .Net und Wpf gepostet.

    Kurz zum Hintergrund:
    Ich arbeite an einem WPF Projekt und nutze c#, .Net4.0 und das MVVM Pattern.
    Ich habe eine Konfiguration meiner Anwendung komplett mittels XAML-Markup realisiert (hat den Hintergrund, dass beim parsen direkt ein Objekt-Baum erzeugt wird).

    Zum Problem (Kurzfassung):
    Ich suche nach einem Weg wie ich in XAM Objekte/Elemente referenzieren kann.

    Problem (Detailiert):
    Hier ist ein kleines Code-beispiel:

    Code (XML):
    1. <RootConfiguration
    2.  xmlns="clr-namespace:Configuration;assembly=Configuration"
    3.  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    4.   <RootConfiguration.Elements>
    5.     <ElementList x:Name="completeElementDefinition">
    6.       <Element Type="X" Show="True" Refresh="30" Name="A1" />
    7.       <Element Type="Y" Show="True" Refresh="30" Name="B1" />
    8.     </ElementList>
    9.   </RootConfiguration.Elements>
    10.  
    11.   <RootConfiguration.ElementGroups>
    12.     <ElementGroupList>
    13.       <ElementGroup Name="All Elements">
    14.         <ElementGroup.Elements>
    15.           <!-- How to reference the ElementList "completeElementDefinition" defined above -->
    16.         </ElementGroup.Elements>
    17.       </ElementGroup>
    18.       <ElementGroup Name="Type X Elements">
    19.         <ElementGroup.Elements>
    20.           <ElementList>
    21.             <!-- How to reference single Elements from the list "completeElementDefinition" -->
    22.           </ElementList>
    23.         </ElementGroup.Elements>
    24.       </ElementGroup>
    25.       <ElementGroup Name="Type Y Elements">
    26.         <ElementGroup.Elements>
    27.           <ElementList>
    28.             <!-- How to reference single Elements from the list "completeElementDefinition" -->
    29.           </ElementList>
    30.         </ElementGroup.Elements>
    31.       </ElementGroup>
    32.     </ElementGroupList>
    33.   </RootConfiguration.ElementGroups>
    34.  
    35. </RootConfiguration>
    Im Hintergrund habe ich Klassen die diese Struktur repräsentieren (und später die Objekt-Struktur aufbauen). Mein Problem ist, ich möchte vermeiden die Elemente, die in dem Attribut 'Elements' deklariert sind redundant im Element 'ElementGroup' nochmal zu deklarieren, deswegen suche ich nach einer Möglichkeit wie ich die Elemente aus 'Elements' referenzieren, bzw "übergeben" kann, und in 'ElementList' verwenden kann (siehe Quelltext).

    Ich habe bereits einige Ansätze gefunden, jedoch führten diese noch nciht zum Ziel. Stichwort: x:Reference oder DependencyProperty.

    Bin für jegliche Anregung und Diskussion dankbar.

    MfG marschal




    EDIT: GELÖST

    Nach nun langer suche bin ich selber auf die Lösung gestoßen, den ich sah den Wald vor Bäumen nicht mehr.
    Deswegen möchte ich meine Lösungen auch hier teilen, falls jemand das selbe oder ähnliche Problem haben sollte...

    Die Lösung bestand darin die zwei oben genannten Aspekte (DependencyProperty und x:Reference) zu kombinieren.

    Ich habe nun eine DependencyProperty für die Eigenschaft ElementGroup.Elements implementiert:
    Code (C++):
    1. #region Dependancy Property
    2. // Dependency Property
    3. public static readonly DependencyProperty ElementsProperty =
    4.      DependencyProperty.Register("Elements", typeof(ElementList),
    5.      typeof(ElementGroup), new PropertyMetadata(null));
    6.  
    7. // .NET Property wrapper
    8. public ElementList Elements {
    9.   get { return (ElementList )GetValue(ElementsProperty ); }
    10.   set { SetValue(ElementsProperty , value); }
    11. }
    12. #endregion
    Nun lassen sich in dem XAML-Dokument die in RootConfiguration.Elements definierten Elemente, bzw. ElementList-Objekte referenzieren mittels eines Data-Bindings:
    Code (XML):
    1. <RootConfiguration.ElementGroups>
    2.     <ElementGroupList>
    3.         <ElementsGroup Name="All Elements" Elements="{x:Reference completeElementDefinition}" />
    4.     <!-- [...] -->
    5.     </ElementGroupList>  
    6. </RootConfiguration.ElementGroups>

    MfG
     
    Zuletzt von einem Moderator bearbeitet: 31. Mai 2014
Die Seite wird geladen...