Laden...

Zugriff von .xaml.cs auf .cs

Erstellt von N da G vor 13 Jahren Letzter Beitrag vor 13 Jahren 10.498 Views
N
N da G Themenstarter:in
10 Beiträge seit 2010
vor 13 Jahren
Zugriff von .xaml.cs auf .cs

Hi,

ich möchte von einer .xaml.cs auf die Daten der zugehörigen .cs Datei zugreifen von welcher sich die .xaml Datei die Daten holt. Ich verstehe die Reihenfolge der Zugriffe grade nicht. In der .cs Datei wird eine Liste erstellt. Diese Liste wird von der .xaml Datei in den Content eines HeaderedContentControl geladen dies funktioniert mit folgendem Code:

<HeaderedContentControl Grid.Column="2"
Header="Rechte Seite"
DataContext="{Binding}"
Content="{Binding Path=RightDimensionExplorerList, ValidatesOnDataErrors=True}"
ContentTemplate="{StaticResource DimExList}"
Foreground="#FF000000"
Margin="0,0,5,0"
x:Name="RightSide" />

Nun möchte ich auf eben diese Liste in der Code-Behind Datei, der .xaml.cs Datei zugreifen. Wenn ich aber nun mit folgendem Code:

List<DimensionExplorerVM> explorerList = (List<DimensionExplorerVM>)RightSide.Content;

versuche auf den Content zuzugreifen ist dieser immer null. Was mache ich falsch? Müsste nach dem

InitializeComponent();

nicht eigentlich die entsprechende Liste (die auch beim Debuggen in der .cs Datei gefüllt wird) in dem Content zu finden sein?

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo N da G,

beachte, dass es partielle Klassen sind!

zero_x

N
N da G Themenstarter:in
10 Beiträge seit 2010
vor 13 Jahren

Genau das ist mein Problem ich verstehe den Zusammenhang zwischen den partiellen Klassen und der eigentlichen Hauptklasse nicht so ganz. Gibt es denn eine Möglichkeit zwischen den Klassen die Daten auszutauschen?

151 Beiträge seit 2009
vor 13 Jahren

ich möchte von einer .xaml.cs auf die Daten der zugehörigen .cs Datei zugreifen von welcher sich die .xaml Datei die Daten holt.

.
.
.

DataContext="{Binding}"

Damit hast du doch schon den Kontext deiner .cs Datei. Das was du in den DataContext setzt kannst du in der .xaml verwenden.

Genau das ist mein Problem ich verstehe den Zusammenhang zwischen den partiellen Klassen und der eigentlichen Hauptklasse nicht so ganz.

Partielle Klassen = die Konstruktion einer Klasse kann auf mehrere Dateien zerlegt werden. Das geschieht standardmäßig wenn du eine Seite in dein Projekt hinzufügst. Bsp: Window.xaml und Window.xaml.cs

Grüßle
Jéré

M
164 Beiträge seit 2009
vor 13 Jahren

Erstell die Liste im Code behind (.xaml.cs) und setze dann diese auf den DataContext

var myList = new List<string>();

public XY() {
Initialize();
this.DataContext = myList;
}

=> xaml:
<... DataContext="{Binding}"... />

Ansonsten schau dir mal Tutorials zu Xaml, Code behind und DataContext an.. (wahrscheinlich wirst du sehr schnell auf das MVVM Stichwort stossen, aber dazu gibt es auch viele Infos im Netz...)

Gruss

N
N da G Themenstarter:in
10 Beiträge seit 2010
vor 13 Jahren

Danke erstmal für die vielen tipps. Aber mein Problem ist das ich die Liste nicht im Code-Behind erstellen kann. Sie wird in der .cs Datei erstellt und sie wird auch in der .xaml Datei eingebunden und verwendet. Ich möchte aber folgendes machen:

Ich möchte die Liste die im DataKontext gepseichert wird im Code-Behind abrufen um dynamisch die .xaml zu verändern. Generell kann man das so beschreiben, dass die Liste zur Zeit in nur einer Column angeordnet wird. Die Liste kann jedoch beliebig viele Expander enthalten und diese Expander werden dann immer zentriert angeordnet wenn man sie aufklappt. Daher möchte ich die Expander auf mehrere Columns aufteilen und das geht doch nur im Code-Behind oder? Daher brauche ich aber die Daten die in der Liste drinne sind und auf die versuche ich zuzugreifen. Aber wie oben erwähnt ist der Content nach dem Aufruf von

initializeComponent()

immer null.

Ich habe mich auch schon durch einige WPF-Tutorials durchgearbeitet und bin immer wieder darauf gestoßen, dass man nur die Oberfläche dynamisch verändern kann wenn man auf xaml verzichtet. Stimmt das oder gibt es da doch eine Möglichkeit?

M
164 Beiträge seit 2009
vor 13 Jahren

Poste mal dein Code, vielleicht versteht man dann dein Problem... (so wie ich das verstehe ist deine cs Klasse eine typische ViewModel Klasse, die du auch direkt an den DataContext hängen könntest...)

Und das die oberfläche nicht durch xaml dynamisch verändert werden kann, hängt wohl stark von den gewünschten änderungen ab...

wie gesagt, dein code würde wohl helfen...

N
N da G Themenstarter:in
10 Beiträge seit 2010
vor 13 Jahren

Ich zeige einfach mal ein paar Snippets die benutzt werden.

Also folgendes wird in der Klasse RulePageVM aufgerufen:

public RuleVM TheRule { get; set; }

foreach (DimensionVM dim in TheRule.RightSide)
            {
                DimensionExplorerVM dimEx = new DimensionExplorerVM(dim);
                RightDimensionExplorerList.Add(dimEx);
                dimEx.PropertyChanged += OnSelectionChangedHandler;
                dim.PropertyChanged += OnSelectionChangedHandler;
            }

RightSide wird dabei in der Klasse RuleVM gefüllt.L:

public List<DimensionVM> RightSide { get; set; }

foreach (Dimension dim in rule.RightSide)
                RightSide.Add(new DimensionVM(dim));

Mit jeder Dimension wird ein DimensionExplorer initialisiert und dieser hat dann folgenden XAML-Code:

<UserControl x:Class="RuleEditor.View.DimensionExplorer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:v="clr-namespace:RuleEditor.View"
xmlns:vm="clr-namespace:RuleEditor.ViewModel"
xmlns:attached="clr-namespace:RuleEditor"
xmlns:Models="clr-namespace:RuleEditor.ViewModel.Models"
VerticalAlignment="Top">
<UserControl.Resources>
<!--NodeList-->
<!-- Hier werden die Knoten für die neue(n) RegelEntität(en) eingetragen-->
<DataTemplate x:Key="NodeList">
<ListView ItemsSource="{Binding ., ValidatesOnDataErrors=True}"
MaxHeight="450"
Background="AliceBlue"
Margin="0,4,0,0"
SelectionMode="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type HeaderedContentControl}, AncestorLevel=3},Path=DataContext.SelectionMode}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="IsSelected"
Value="{Binding IsSelected}" />
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<!-- CommandBind auf den DoubleClick Command im DimExplVM
attached:ClickCommands.MouseDoubleClickCommand="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}, AncestorLevel=2},Path=DataContext.DoubleClick}"
attached:ClickCommands.MouseEventParameter="{Binding RelativeSource={RelativeSource Self}}"-->
<!-- ParameterBind auf dieses Element-->
<TextBlock Text="{Binding Name}"
Margin="2.5,0,10,0">
<TextBlock.ToolTip>
<TextBlock Text="{Binding Description}" />
</TextBlock.ToolTip>
</TextBlock>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</DataTemplate>
<LinearGradientBrush x:Key="LoadInProgressBrush"
StartPoint="0,0.5"
EndPoint="1,0.5">
<GradientStop Color="#40757F"
Offset="0" />
<GradientStop Color="#00D7FF"
Offset="0.97" />
<GradientStop Color="#80EBFF"
Offset="0.999" />
<GradientStop Color="#E6FBFF"
Offset="1" />
</LinearGradientBrush>

    &lt;Style x:Key=&quot;progressBarBorderStyle&quot;  
           TargetType=&quot;Border&quot;&gt;  
        &lt;Style.Resources&gt;  
            &lt;LinearGradientBrush x:Key=&quot;progressBarBackgroundBrush&quot;  
                                 StartPoint=&quot;0.5,0&quot;  
                                 EndPoint=&quot;0.5,1&quot;&gt;  
                &lt;GradientStop Color=&quot;#88000000&quot;  
                              Offset=&quot;0.1&quot; /&gt;  
                &lt;GradientStop Color=&quot;#CC000000&quot;  
                              Offset=&quot;0.9&quot; /&gt;  
            &lt;/LinearGradientBrush&gt;  
            &lt;LinearGradientBrush x:Key=&quot;progressBarBorderBrush&quot;  
                                 StartPoint=&quot;0.5,0&quot;  
                                 EndPoint=&quot;0.5,1&quot;&gt;  
                &lt;GradientStop Color=&quot;#18000000&quot;  
                              Offset=&quot;0.1&quot; /&gt;  
                &lt;GradientStop Color=&quot;#08000000&quot;  
                              Offset=&quot;0.9&quot; /&gt;  
            &lt;/LinearGradientBrush&gt;  
        &lt;/Style.Resources&gt;  

        &lt;Setter Property=&quot;Background&quot;  
                Value=&quot;{StaticResource progressBarBackgroundBrush}&quot; /&gt;  
        &lt;Setter Property=&quot;BorderBrush&quot;  
                Value=&quot;{StaticResource progressBarBorderBrush}&quot; /&gt;  
        &lt;Setter Property=&quot;BorderThickness&quot;  
                Value=&quot;1&quot; /&gt;  
        &lt;Setter Property=&quot;CornerRadius&quot;  
                Value=&quot;8&quot; /&gt;  
        &lt;Setter Property=&quot;Margin&quot;  
                Value=&quot;2,4&quot; /&gt;  
    &lt;/Style&gt;  
    &lt;attached:WidthConverter x:Key=&quot;WidthConv&quot; /&gt;  
    &lt;!-- der Ladebalken--&gt;  
    &lt;DataTemplate x:Key=&quot;progBar&quot;&gt;  
        &lt;Border x:Name=&quot;progressBar&quot;  
                DataContext=&quot;{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContentControl}}, Path=DataContext}&quot;  
                Style=&quot;{StaticResource progressBarBorderStyle}&quot;&gt;  
            &lt;Grid  Width=&quot;{Binding ElementName=containerName, Path=ActualWidth}&quot;&gt;  
                &lt;StackPanel Orientation=&quot;Horizontal&quot;&gt;  
                    &lt;Rectangle x:Name=&quot;progressIndicator&quot;  
                               Fill=&quot;{StaticResource LoadInProgressBrush}&quot;  
                               HorizontalAlignment=&quot;Left&quot;  
                               Margin=&quot;1&quot;  
                               RadiusX=&quot;8&quot;  
                               RadiusY=&quot;8&quot;&gt;  
                        &lt;!--  die Breite des Ladebalkens mittels Converter berechnen --&gt;  
                        &lt;Rectangle.Width&gt;  
                            &lt;MultiBinding Converter=&quot;{StaticResource WidthConv}&quot;&gt;  
                                &lt;Binding Path=&quot;PercentComplete&quot; /&gt;  
                                &lt;Binding ElementName=&quot;progressBar&quot;  
                                         Path=&quot;ActualWidth&quot; /&gt;  
                            &lt;/MultiBinding&gt;  
                        &lt;/Rectangle.Width&gt;  
                    &lt;/Rectangle&gt;  
                &lt;/StackPanel&gt;  

                &lt;TextBlock  x:Name=&quot;containerName&quot;  
                            Text=&quot;{Binding Name}&quot;  
                            VerticalAlignment=&quot;Center&quot;  
                            Foreground=&quot;White&quot; /&gt;  
            &lt;/Grid&gt;  
            &lt;!-- prozentualer Ladeanteil als Tooltip anzeigen --&gt;  
            &lt;Border.ToolTip&gt;  
                &lt;ToolTip&gt;  
                    &lt;Grid&gt;  
                        &lt;TextBlock&gt;  
          &lt;TextBlock Text=&quot;{Binding PercentComplete}&quot;  
                            Margin=&quot;0,0,-2,0&quot; /&gt;  
          &lt;Run&gt;% finished&lt;/Run&gt;  
        &lt;/TextBlock&gt;  
                    &lt;/Grid&gt;  
                &lt;/ToolTip&gt;  
            &lt;/Border.ToolTip&gt;  
        &lt;/Border&gt;  
    &lt;/DataTemplate&gt;  
    &lt;!-- Dimension Tree --&gt;  
    &lt;DataTemplate x:Key=&quot;DimensionTree&quot;&gt;  
        &lt;!-- gleiches Binding wie Elternelement --&gt;  
        &lt;!-- x:Type beschreibt je nach Type des Elementes die Darstellung,   
    Knoten besitzen z.B. keine weiteren Kindelemente,   
    daher fehlt dort der Itemsource--&gt;  
        &lt;v:TreeViewEx ItemsSource=&quot;{Binding}&quot;  
                      Background=&quot;AliceBlue&quot;  
                      Name=&quot;TheTreeView&quot;  
                      MaxHeight=&quot;443&quot;&gt;  
            &lt;TreeView.ItemContainerStyle&gt;  
                &lt;Style TargetType=&quot;TreeViewItem&quot;&gt;  
                    &lt;Setter Property=&quot;Template&quot;&gt;  
                        &lt;Setter.Value&gt;  
                            &lt;ControlTemplate TargetType=&quot;TreeViewItem&quot;&gt;  
                                &lt;StackPanel Margin=&quot;10,2,0,0&quot;&gt;  
                                    &lt;WrapPanel Name=&quot;TVItem&quot;&gt;  
                                        &lt;ToggleButton Name=&quot;TVexpander&quot;  
                                                      IsChecked=&quot;{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsExpanded}&quot;  
                                                      Content=&quot;+&quot;  
                                                      Command=&quot;{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}, AncestorLevel=2}, Path=DataContext.CheckExpanderCommand}&quot;  
                                                      CommandParameter=&quot;{Binding RelativeSource={RelativeSource Self}}&quot; /&gt;  

                                        &lt;ContentPresenter x:Name=&quot;PART_Header&quot;  
                                                          ContentSource=&quot;Header&quot; /&gt;  
                                    &lt;/WrapPanel&gt;  
                                    &lt;Border&gt;  
                                        &lt;ItemsPresenter Name=&quot;TVchildren&quot;  
                                                        Visibility=&quot;Collapsed&quot; /&gt;  
                                    &lt;/Border&gt;  
                                &lt;/StackPanel&gt;  
                                &lt;ControlTemplate.Triggers&gt;  
                                    &lt;DataTrigger Binding=&quot;{Binding IsExpanded}&quot;  
                                                 Value=&quot;True&quot;&gt;  
                                        &lt;Setter TargetName=&quot;TVchildren&quot;  
                                                Property=&quot;Visibility&quot;  
                                                Value=&quot;Visible&quot; /&gt;  
                                    &lt;/DataTrigger&gt;  
                                    &lt;!-- Den Expander nur aktivieren, wenn das Element Ebenen als Kinder hat--&gt;  
                                    &lt;DataTrigger Binding=&quot;{Binding IsNode}&quot;  
                                                 Value=&quot;True&quot;&gt;  
                                        &lt;Setter TargetName=&quot;TVexpander&quot;  
                                                Property=&quot;Visibility&quot;  
                                                Value=&quot;Collapsed&quot; /&gt;  
                                    &lt;/DataTrigger&gt;  
                                    &lt;Trigger Property=&quot;Visibility&quot;  
                                             Value=&quot;Collapsed&quot;&gt;  
                                        &lt;Setter TargetName=&quot;TVexpander&quot;  
                                                Property=&quot;IsEnabled&quot;  
                                                Value=&quot;False&quot; /&gt;  
                                    &lt;/Trigger&gt;  
                                &lt;/ControlTemplate.Triggers&gt;  
                            &lt;/ControlTemplate&gt;  
                        &lt;/Setter.Value&gt;  
                    &lt;/Setter&gt;  
                    &lt;Setter Property=&quot;IsSelected&quot;  
                            Value=&quot;{Binding IsSelected, Mode=TwoWay}&quot; /&gt;  
                    &lt;Setter Property=&quot;FontWeight&quot;  
                            Value=&quot;Normal&quot; /&gt;  
                    &lt;Style.Triggers&gt;  
                        &lt;Trigger Property=&quot;IsSelected&quot;  
                                 Value=&quot;True&quot;&gt;  
                            &lt;Setter Property=&quot;FontWeight&quot;  
                                    Value=&quot;Bold&quot; /&gt;  
                        &lt;/Trigger&gt;  
                    &lt;/Style.Triggers&gt;  
                &lt;/Style&gt;  
            &lt;/TreeView.ItemContainerStyle&gt;  
            &lt;TreeView.Resources&gt;  
                &lt;!-- Binding LayerVM--&gt;  
                &lt;HierarchicalDataTemplate DataType=&quot;{x:Type Models:LayerVM}&quot;  
                                          ItemsSource=&quot;{Binding Path=Children}&quot;&gt;  
                    &lt;StackPanel Orientation=&quot;Horizontal&quot;&gt;  
                        &lt;ContentControl DataContext=&quot;{Binding}&quot;  
                                        ContentTemplate=&quot;{StaticResource progBar}&quot; /&gt;  
                    &lt;/StackPanel&gt;  
                &lt;/HierarchicalDataTemplate&gt;  
                &lt;HierarchicalDataTemplate DataType=&quot;{x:Type Models:NodeVM}&quot; /&gt;  
            &lt;/TreeView.Resources&gt;  
        &lt;/v:TreeViewEx&gt;  
    &lt;/DataTemplate&gt;  

&lt;/UserControl.Resources&gt;  

&lt;!-- Die einzelne Dimension. Jede Dimension ist komplett ein/ausklappbar.--&gt;  

&lt;Expander x:Name=&quot;DimExpander&quot;&gt;  
    &lt;Expander.Header&gt;  
        &lt;ContentControl DataContext=&quot;{Binding}&quot;  
                        ContentTemplate=&quot;{StaticResource progBar}&quot; /&gt;  
    &lt;/Expander.Header&gt;  
    &lt;Expander.Style&gt;  
        &lt;Style TargetType=&quot;Expander&quot;&gt;  
            &lt;Setter Property=&quot;Template&quot;&gt;  
                &lt;Setter.Value&gt;  
                    &lt;ControlTemplate TargetType=&quot;Expander&quot;&gt;  
                        &lt;StackPanel Margin=&quot;10,2,0,0&quot;&gt;  
                            &lt;WrapPanel Name=&quot;DimItem&quot;&gt;  
                                &lt;!--Den Button überschreiben, damit die Kinder (in der Ebenenauswahl oder Knotenauswahl) beim Öffnen dynamisch geladen werden.--&gt;  
                                &lt;ToggleButton Name=&quot;DimExpButton&quot;  
                                              IsChecked=&quot;{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsExpanded}&quot;  
                                              Content=&quot;+&quot;  
                                              Command=&quot;{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}}, Path=DataContext.CheckExpanderCommand}&quot;  
                                              CommandParameter=&quot;{Binding RelativeSource={RelativeSource Self}}&quot;  
                                              DataContext=&quot;{Binding Dimension}&quot; /&gt;  

                                &lt;ContentPresenter x:Name=&quot;PART_Header&quot;  
                                                  ContentSource=&quot;Header&quot; /&gt;  
                            &lt;/WrapPanel&gt;  
                            &lt;Border&gt;  
                                &lt;ContentPresenter Name=&quot;DimChildren&quot;  
                                                  Visibility=&quot;Collapsed&quot; /&gt;  
                            &lt;/Border&gt;  
                        &lt;/StackPanel&gt;  
                        &lt;ControlTemplate.Triggers&gt;  
                            &lt;!-- Inhalt des Expanders (Ebenen-, Knotenauswahl,...) sichtbar machen, wenn die Dimension geöffnet wurde. --&gt;  
                            &lt;DataTrigger Binding=&quot;{Binding Dimension.IsExpanded}&quot;  
                                         Value=&quot;True&quot;&gt;  
                                &lt;Setter TargetName=&quot;DimChildren&quot;  
                                        Property=&quot;Visibility&quot;  
                                        Value=&quot;Visible&quot; /&gt;  
                            &lt;/DataTrigger&gt;  
                        &lt;/ControlTemplate.Triggers&gt;  
                    &lt;/ControlTemplate&gt;  
                &lt;/Setter.Value&gt;  
            &lt;/Setter&gt;  
        &lt;/Style&gt;  
    &lt;/Expander.Style&gt;  
    &lt;Border  BorderBrush=&quot;Black&quot;  
             BorderThickness=&quot;1&quot;  
             Margin=&quot;0,0,5,5&quot;  
             VerticalAlignment=&quot;Top&quot;&gt;  
        &lt;Grid Background=&quot;#D6ECFF&quot; VerticalAlignment=&quot;Center&quot;&gt;  
            &lt;Grid.ColumnDefinitions&gt;  
                &lt;ColumnDefinition Width=&quot;50*&quot; /&gt;  
                &lt;ColumnDefinition Width=&quot;50*&quot; /&gt;  
            &lt;/Grid.ColumnDefinitions&gt;  


            &lt;!-- Abschnitt Ebenenauswahl--&gt;  
            &lt;Expander Header=&quot;Layers&quot;  
                      Name=&quot;DimTree&quot;  
                      Grid.Column=&quot;0&quot;  
                      Content=&quot;{Binding Dimension.Children}&quot;  
                      ContentTemplate=&quot;{StaticResource DimensionTree}&quot;&gt;  
                &lt;Expander.Style&gt;  
                    &lt;Style TargetType=&quot;Expander&quot;&gt;  
                        &lt;Setter Property=&quot;Template&quot;&gt;  
                            &lt;Setter.Value&gt;  
                                &lt;ControlTemplate TargetType=&quot;Expander&quot;&gt;  
                                    &lt;StackPanel Margin=&quot;10,2,0,0&quot;&gt;  
                                        &lt;WrapPanel Name=&quot;LayerItem&quot;&gt;  
                                            &lt;ToggleButton Name=&quot;LayerExpander&quot;  
                                                          IsChecked=&quot;{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsExpanded}&quot;  
                                                          Content=&quot;+&quot;  
                                                          Command=&quot;{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}, AncestorLevel=2}, Path=DataContext.CheckExpanderCommand}&quot;  
                                                          CommandParameter=&quot;{Binding RelativeSource={RelativeSource Self}}&quot; /&gt;  

                                            &lt;ContentPresenter x:Name=&quot;PART_Header&quot;  
                                                              ContentSource=&quot;Header&quot; /&gt;  
                                        &lt;/WrapPanel&gt;  
                                        &lt;Border&gt;  
                                            &lt;!-- Ebenen sollen von Anfang an angezeigt werden.--&gt;  
                                            &lt;ContentPresenter Name=&quot;LayerChildren&quot;  
                                                              Visibility=&quot;Visible&quot; /&gt;  
                                        &lt;/Border&gt;  
                                    &lt;/StackPanel&gt;  
                                    &lt;ControlTemplate.Triggers&gt;  
                                        &lt;DataTrigger Binding=&quot;{Binding Dimension.ChildIsNode}&quot;  
                                                     Value=&quot;True&quot;&gt;  
                                            &lt;Setter TargetName=&quot;LayerItem&quot;  
                                                    Property=&quot;Visibility&quot;  
                                                    Value=&quot;Collapsed&quot; /&gt;  
                                            &lt;Setter TargetName=&quot;LayerChildren&quot;  
                                                    Property=&quot;Visibility&quot;  
                                                    Value=&quot;Collapsed&quot; /&gt;  
                                        &lt;/DataTrigger&gt;  
                                        &lt;!-- Normales Ein- und Ausklappen implementieren. --&gt;  
                                        &lt;Trigger Property=&quot;IsExpanded&quot;  
                                                 Value=&quot;True&quot;&gt;  
                                            &lt;Setter TargetName=&quot;LayerChildren&quot;  
                                                    Property=&quot;Visibility&quot;  
                                                    Value=&quot;Visible&quot; /&gt;  
                                        &lt;/Trigger&gt;  
                                        &lt;Trigger Property=&quot;IsExpanded&quot;  
                                                 Value=&quot;False&quot;&gt;  
                                            &lt;Setter TargetName=&quot;LayerChildren&quot;  
                                                    Property=&quot;Visibility&quot;  
                                                    Value=&quot;Collapsed&quot; /&gt;  
                                        &lt;/Trigger&gt;  
                                    &lt;/ControlTemplate.Triggers&gt;  
                                &lt;/ControlTemplate&gt;  
                            &lt;/Setter.Value&gt;  
                        &lt;/Setter&gt;  
                    &lt;/Style&gt;  
                &lt;/Expander.Style&gt;  
            &lt;/Expander&gt;  
            &lt;!-- Abschnitt Knotenauswahl--&gt;  
            &lt;Expander Header=&quot;Nodes&quot;  
                      Name=&quot;NodeSelection&quot;  
                      Grid.Column=&quot;1&quot;  
                      DataContext=&quot;{Binding}&quot;  
                      IsExpanded=&quot;True&quot;  
                      IsEnabled=&quot;{Binding IsEnabled}&quot;  
                      Content=&quot;{Binding CurrentSelectedItemsChildren}&quot;  
                      ContentTemplate=&quot;{StaticResource NodeList}&quot;  
                      Margin=&quot;0,0,2.5,2.5&quot;  
                      VerticalAlignment=&quot;Top&quot; /&gt;  
            &lt;!--&lt;Grid Grid.Column=&quot;2&quot;&gt;  
                &lt;Grid.RowDefinitions&gt;  
                    &lt;RowDefinition Height=&quot;50*&quot; /&gt;  
                    &lt;RowDefinition Height=&quot;50*&quot; /&gt;  
                &lt;/Grid.RowDefinitions&gt;  
                &lt;Button Name=&quot;AddButton&quot;  
                        Grid.Row=&quot;0&quot;  
                        Content=&quot;&gt;&gt;&quot;  
                        Command=&quot;{Binding AddCommand}&quot; /&gt;  
                &lt;Button Grid.Row=&quot;1&quot;  
                        Content=&quot;&amp;lt;&amp;lt;&quot;  
                        Command=&quot;{Binding RemoveCommand}&quot; /&gt;  
            &lt;/Grid&gt;--&gt;  

            &lt;!-- Abschnitt Hinzuzufügende Knoten--&gt;  
            &lt;!--&lt;Expander Grid.Column=&quot;3&quot;  
                      MinHeight=&quot;275&quot;  
                      Header=&quot;Hinzuzufügende Knoten&quot;  
                      Name=&quot;NodesToBeAdded&quot;  
                      DataContext=&quot;{Binding}&quot;  
                      Content=&quot;{Binding NodesToBeAdded}&quot;  
                      ContentTemplate=&quot;{StaticResource NodeList}&quot;  
                      IsExpanded=&quot;True&quot; /&gt;--&gt;  
        &lt;/Grid&gt;  
    &lt;/Border&gt;  
&lt;/Expander&gt;  

</UserControl>

Diese Dimensions werden dann in der Liste (RightDimensionExplorerList siehe Anfang) gespeichert. Diese Liste wird dann in der RulePage.xaml gebunden.

<HeaderedContentControl Grid.Column="2"
Header="Rechte Seite"
DataContext="{Binding}"
Content="{Binding Path=RightDimensionExplorerList, ValidatesOnDataErrors=True}"
ContentTemplate="{StaticResource DimExList}"
Foreground="#FF000000"
Margin="0,0,5,0"
x:Name="RightSide" />

Soviel zum Code aber wenn ich nun diese Liste im Code-Behind nach dem

initializeComponent()

über den Content aufrufen will ist dieser immer null.

N
N da G Themenstarter:in
10 Beiträge seit 2010
vor 13 Jahren

Ist immer noch nicht klar was genau ich machen möchte oder weiß hier niemand wie ich zu einer Lösung kommen kann?

297 Beiträge seit 2008
vor 13 Jahren

Nach dem InitializeComponent kann es durchaus sein, dass die Liste noch null ist, schau dir das Ganze mal nach dem Loaded-Event an, da müsste sie dann gesetzt sein.
Alternativ kannst du dich auch an das Content-DependencyProperty "ranhängen" und auf Änderungen an diesem reagieren.

Edit: Warum greifst du nicht direkt auf den DataContext zu (der ja deine Liste enthält), sobald dieser gesetzt ist (hier kannst du einfach auf DataContextChanged reagieren), sondern gehst den Umweg über das HeaderedContentControl?

There are 10 kind of people, those who understand binary and those who don't.

1.002 Beiträge seit 2007
vor 13 Jahren

Hallo N da G,

Ist immer noch nicht klar was genau ich machen möchte oder weiß hier niemand wie ich zu einer Lösung kommen kann?

ehrlich gesagt halte ich es für eine Zumutung, sich den gesamten XAML-Code, den du gepostet hast, durchzulesen. Abgesehen davon wäre es hilfreich gewesen, ihn in XML-Tags zu packen und entsprechend einzurücken.

m0rius

666 Beiträge, Achtung, diabolisch 😛

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

N
N da G Themenstarter:in
10 Beiträge seit 2010
vor 13 Jahren

Vielen Dank für die schnelle Antwort. Leider kann ich damit zur Zeit noch nicht ganz so viel anfangen. Wäre es möglich das du ein Beispiel bereit stellen könntest habe noch nicht ganz so viel mit xaml und code behind gemacht und versuche ein schon fertiges Programm zu bearbeiten was es nicht unbedingt leichter macht.

@m0rius: Tut mir leid ich wusste nicht wie ich die einrückung machen kann. Ich habe den Code lediglich mit eingestellt damit jemand der sich eventuell sehr gut damit auskennt die relevanten Stellen finden kann. Wie eben erwähnt kenne ich mich mit xaml noch nicht sehr gut aus.

Wie funktioniert das denn genau mit dem DataContextChanged? (Falls es zu viele Umstände macht kann ich es jedoch selber googlen). Aber schonmal Danke für den Tipp.

297 Beiträge seit 2008
vor 13 Jahren

Naja, im Konstruktor schreibst du sowas wie

this.DataContextChanged += OnDataContextChanged;

Dazu noch eine entsprechende Methode

private void OnDataContextChanged(object sender, EventArgs e)
{
    var list = (this.DataContext as >>HierDenTypDerDieListeEnthältEinfügen<<).RightDimensionExplorerList;
    // Da hast du die Liste.
}

Ungetestet hier im Forum geschrieben, evtl passen die EventArgs nicht.

There are 10 kind of people, those who understand binary and those who don't.

N
N da G Themenstarter:in
10 Beiträge seit 2010
vor 13 Jahren

Ok super vielen Dank werde ich mal ausprobieren und nach den genauen Eventargs kann ich ja googlen.

Klingt auf jeden Fall schonmal so als wenn es damit funktionieren könnte.

Gruß N da G

1.002 Beiträge seit 2007
vor 13 Jahren

Hallo N da G,

deinen C#-Code packst du in CSHARP-Tags, der XAML-Code gehört in XML-Tags. Deutlich besser zu lesen wird dieser natürlich, wenn er eingerückt eingefügt wird.

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

N
N da G Themenstarter:in
10 Beiträge seit 2010
vor 13 Jahren

Alles klar werde das nächste mal daran denken