Многоуровневая привязка данных в меню UserControl зависят друг от друга
У меня есть свойство Tours
:
Tours
являетсяObservableCollection
классаTour
- Каждый "Тур" имеет a
ObservableCollection
Parties
классаPartie
- Каждый
Partie
имеетObservableCollection
Equipes
классаEquipe
- Каждый
- Каждый "Тур" имеет a
У меня есть 3 меню:
- Первая является связь со свойством
Tours
- Вторые должна быть связью с
SelectedItem
свойства первого меню (так что имеетObservableCollection
классаPartie
) - Третьи должна быть связь с
SelectedItem
свойства второго меню. (так что имеетObservableCollection
классаEquipes
)
Прямо сейчас, это рабочий код:
<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>
И тогда я могу изменить вид контекста в зависимости от SelectedItem
из меню:
<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>
Моя проблема, если мое меню становится Usercontrol
, Я не могу сделать databinding
между меню и ListView
(что я назвал: lvMenu
) внутри MenuUserControl
. Я, хотя это было бы так просто, как сделать что-то вроде этого:
<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}" />
И тогда контекст будет достижимым таким же образом:
<local:StatistiquesTour DataContext="{Binding ElementName=MenuTours.lvMenu, Path=SelectedItem}" />
<local:StatistiquesParties DataContext="{Binding ElementName=MenuParties.lvMenu, Path=SelectedItem}" />
...
lvMenu
(ListView
) в MenuUserControl
имеет ItemsSource="{Binding}"
к привяжите его к контексту.
У кого-нибудь есть ключ, как это сделать?(Извините за мой английский)
Вам нужен шаблон MVVM. дайте мне посмотреть – Coding4Fun
Я не уверен, но возможно, что [сообщение в блоге] (http://blog.jerrynixon.com/2013/07/solved-two-way-binding-inside-user.html?m=1) может быть решением. Он передает «объект» через «DependencyProperty». Кажется, это сложнее, чем я. – maxeber