绑定嵌套数据

时间:2013-08-02 12:28:32

标签: c# wpf binding

我有一个班级

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; }
}

数据必须以下列形式显示

enter image description here

我这样做 - 链接填充数据的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选项不起作用。

2 个答案:

答案 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页面上找到更多信息。