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 プロパティを追加し、それをファースト ネーム リスト ボックスの選択されたアイテムにバインドするか、List の代わりに ICollectionView を使用して、その CurrentItem をファースト ネーム リスト ボックスと同期させることです。

于 2013-08-02T12:46:03.883 に答える
1

次のバインディング構文を使用できると思います。

ItemsSource="{Binding ListData1/ListData2}" 

これは、ListData2の現在または選択されたインスタンスのプロパティにバインドすることを意味しますListData1

詳細については、MSDN のBinding.Path プロパティページを参照してください。

于 2013-08-02T13:40:04.797 に答える