3

我有一堂课

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 选项不起作用。

4

2 回答 2

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 与名字列表框同步。

于 2013-08-02T12:46:03.883 回答
1

我相信您可以只使用以下绑定语法:

ItemsSource="{Binding ListData1/ListData2}" 

这意味着绑定到ListData2当前或选定实例的属性ListData1

您可以从 MSDN 的Binding.Path 属性页面了解更多信息。

于 2013-08-02T13:40:04.797 回答