Multi-Level-Datenbindung auf Usercontrol Menü voneinander abhängig
habe ich eine Eigenschaft Tours
:
Tours
ist einObservableCollection
der KlasseTour
- Jede "Tour" hat eine
ObservableCollection
Parties
der KlassePartie
- Jeder
Partie
hat eineObservableCollection
Equipes
der KlasseEquipe
- Jeder
- Jede "Tour" hat eine
Ich habe 3 Menüs:
- Die erste ist eine Bindung mit der Eigenschaft
Tours
- die zweite Bindung mit der
SelectedItem
Eigenschaft des ersten Menüs sein muss (so hat es einObservableCollection
der KlassePartie
) - Die dritte muss Bindung sein mit der
SelectedItem
Eigenschaft des zweiten Menüs. (so hat es einObservableCollection
der KlasseEquipes
)
Gerade jetzt, das ist der Arbeitscode:
<StackPanel>
<ListView Name="lvTours" ItemsSource="{Binding Tours}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Name}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ListView>
<ListView Name="lvParties" ItemsSource="{Binding ElementName=lvTours, Path=SelectedItem.Parties}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Name}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ListView>
<ListView Name="lvEquipes" ItemsSource="{Binding ElementName=lvParties, Path=SelectedItem.Equipes}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Name}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ListView>
</StackPanel>
Und dann kann ich den Blick auf den Kontext auf dem SelectedItem
je ändern der Menüs:
<StackPanel Grid.Column="1">
<local:StatistiquesTour DataContext="{Binding ElementName=lvTours, Path=SelectedItem}" />
<local:StatistiquesParties DataContext="{Binding ElementName=lvParties, Path=SelectedItem}" />
<local:StatistiquesEquipes DataContext="{Binding ElementName=lvEquipes, Path=SelectedItem}" />
</StackPanel>
Mein Problem ist, wenn meine Menüs Usercontrol
werden , Ich kann nicht scheinen, die databinding
zwischen dem Menü und ListView
(die ich nannte: lvMenu
) innerhalb der MenuUserControl
. Ich dachte, es wäre so einfach sein wie so etwas wie dies zu tun:
<local:MenuUserControl x:Name="MenuTours" DataContext="{Binding Tours}" />
<local:MenuUserControl x:Name="MenuParties" DataContext="{Binding ElementName=MenuTours.lvMenu, Path=SelectedItem}" />
<local:MenuUserControl x:Name="MenuEquipes" DataContext="{Binding ElementName=MenuParties.lvMenu, Path=SelectedItem}" />
Und dann würde der Kontext die gleiche Art und Weise erreichbar sein:
<local:StatistiquesTour DataContext="{Binding ElementName=MenuTours.lvMenu, Path=SelectedItem}" />
<local:StatistiquesParties DataContext="{Binding ElementName=MenuParties.lvMenu, Path=SelectedItem}" />
...
Die lvMenu
(die ListView
) in MenuUserControl
hat seine ItemsSource="{Binding}"
zu Binde es an den Kontext.
Hat jemand eine Ahnung, wie man das macht?(Sorry für mein Englisch)
Sie benötigen MVVM-Muster. Lass mich sehen – Coding4Fun
Ich bin mir nicht sicher, aber vielleicht könnte das [Blog-Post] (http://blog.jerrynixon.com/2013/07/solved-two-way-binding-inside-user.html?m=1) möglicherweise sei die Lösung. Er übergibt ein 'Objekt' durch' DependencyProperty'. Es scheint, es ist schwieriger als das, was ich dachte. – maxeber