【发布时间】:2016-10-17 00:04:04
【问题描述】:
这是我的问题,我想要一些 ListViews,它们的 ItemsSource 绑定到其他 ListViews 的 SelectedItem。
所以我有一个“Tours”ListView,它的 ItemSource 与 ObservableCollection 属性绑定。
现在我希望“Parties”ListView 与“Tours”ListView 的 SelectedItem 绑定。
之后,我希望“Équipes”ListView 与“Parties”ListView 的 SelectedItem 绑定。
等等……
现在,它正在运行,但是程序崩溃了:
- 从“游览”中选择“游览”
- 从“当事人”中选择“当事人”
- 从“Équipes”中选择“Équipe”
- 从“游览”中选择“不同的“游览”
- 崩溃
我想是当我改变“Tour”时,“Équipe”指向不存在的东西。
这是 ListViews 和内容的 XAML(内容现在没有绑定):
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.2*" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<StackPanel>
<Label Style="{StaticResource menu}" Content="Tours" />
<ListView Name="lvTours" ItemsSource="{Binding Tours}" SelectionChanged="lvTours_SelectionChanged">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Nom}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ListView>
<Label Style="{StaticResource menu}" Content="Parties" />
<ListView Name="lvParties" DataContext="{Binding RelativeSource={RelativeSource Self}}" SelectionChanged="lvParties_SelectionChanged" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Nom}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ListView>
<Label Style="{StaticResource menu}" Content="Équipes" />
<ListView Name="lvEquipes" DataContext="{Binding RelativeSource={RelativeSource Self}}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Nom}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ListView>
</StackPanel>
<Label Content="Here's the content..." Grid.Column="1" Margin="30" />
</Grid>
这是cs:
using Lama.Logic.Model.Test;
using System.Windows.Controls;
namespace Lama.UI.UC.TournoiControls.StatistiquesControls
{
/// <summary>
/// Interaction logic for Statistiques.xaml
/// </summary>
public partial class StatistiquesUC : UserControl
{
public Tour SelectedTour { get; set; }
public Partie SelectedPartie { get; set; }
public StatistiquesUC()
{
InitializeComponent();
}
private void lvTours_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
lvParties.ItemsSource = ((Tour)lvTours.SelectedItem).Parties;
}
private void lvParties_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
lvEquipes.ItemsSource = ((Partie)lvParties.SelectedItem).Equipes;
}
}
}
所以:
- “Tours”是 ObservableCollection 的一个属性
- 每个“Tour”都有 ObservableCollection 的“Parties”属性
- 每个“Partie”都有 ObservableCollection 的“Equipes”属性
- 等等……
感谢和抱歉我的英语!
【问题讨论】:
-
你的英文不错:)
标签: c# wpf xaml listview data-binding