我有一个班级
public class MyData
{
public string Caption { get; set; }
public List<Data1> ListData1 {get; set;}
}
public class Data1
{
public string FirstName { get; set; }
public List<Data2> ListData2 { get; set; }
}
public class Data2
{
public string LastName { get; set; }
}
数据必须以下列形式显示
我这样做 - 链接填充数据的MyData ListBox。对他来说,指向DataTemplate,带上代码
<!-- MyData -->
<Grid Grid.Column="0">
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="{Binding Caption}" />
</Grid>
<!-- Data1 -->
<ListBox
Grid.Column="1"
DisplayMemberPath = "FirstName"
ItemsSource="{Binding ListData1 }" />
<!-- -->
<!-- Data2 -->
<ListBox x:Name="lbData2"
Grid.Column="2"
DisplayMemberPath = "LastName"
ItemsSource="{Binding ????}" />
</Grid>
</DataTemplate>
如何为lbData2进行绑定? ListData1.ListData2选项不起作用。
答案 0 :(得分:1)
如果您不想在ViewModel中更改任何内容,则只能在XAML上执行此操作:
<!-- Data1 -->
<ListBox x:Name="firstNamelbx"
Grid.Column="1"
DisplayMemberPath = "FirstName"
ItemsSource="{Binding ListData1 }" />
<!-- -->
<!-- Data2 -->
<ListBox x:Name="lbData2" Grid.Column="2"
DataContext="{Binding Path=SelectedItem, ElementName=firstNamelbx}"
DisplayMemberPath = "LastName"
ItemsSource="{Binding ListData2}" />
我认为更好的方法是在视图模型中添加SelectedFirstName属性并将其与名字列表框的所选项绑定,或使用ICollectionView而不是List并将其CurrentItem与名字列表框同步。
答案 1 :(得分:1)
我相信您可以使用以下绑定语法:
ItemsSource="{Binding ListData1/ListData2}"
这意味着绑定到当前或所选ListData2
实例的ListData1
属性。
您可以在MSDN的Binding.Path Property页面上找到更多信息。