0

私の要件は、ユーザー コントロールをオブジェクトのプロパティにバインドする必要があることです。そのリストは別のオブジェクトに囲まれ、2 番目のオブジェクトのリストは ItemsSource として設定されます。

class A
{
    public string Name
    {
        get; set;
    }
}

class B
{
    public List<A> aObjectList;
}

List<B> bObjectsList = new List<B>();    
userControl.ItemSource = bObjectsList;
userControl.Content = new Binding("Name");

上記のことをどのように行うのですか?

4

3 に答える 3

2

まず、何かが変更されたときに GUI がそれ自体を更新できるようにしたい場合は、 の実装を使用する必要がありNotifyCollectionChangedますObservableCollection<T>

XAML は次のようになります。

   <ItemsControl Name="userControl">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <ItemsControl ItemsSource="{Binding aObjectsList}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Name}" />
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

つまり、UserControl が ItemsControl であると仮定します。次に、コードで次のことを行います。

 userControl.ItemsSource = bObjectsList;

MVVM パターンを参照することをお勧めします。これにより、より構造化されたソリューションが提供され、変更通知などが可能になります。

ここにあなたが始めるための良い記事があります.

于 2012-04-06T13:55:53.720 に答える
1

これは明確ではありませんが、これがあなたが求めていることだと思います。あなたはにバインドします

    bObjectsList[index].aObjectList 

マスター詳細では、次の構文を使用します

    ItemsSource="{binding ElementName=cbbObjectsList path=SelectedItem.aObjectList}"
于 2012-04-06T13:56:41.790 に答える
0

あなたがやろうとしていることについては、多くの解釈があるようです。リストをフラット化する場合は、SelectMany LINQ メソッドを使用します。

List<B> bObjectsList = new List<B>();    
userControl.ItemSource = bObjectsList.SelectMany(b => b.aObjectList);
userControl.Content = new Binding("Name");

A/B のコンテンツが変更されている場合は、おそらくそれらに対してObservableCollectionを使用し、それに応じて対応します。

于 2012-04-06T13:57:55.287 に答える