これはかなり複雑です。うまくいけば、誰かが私を助けてくれるほど十分に明確にすることができます。私はオブジェクトをマネージャーと呼ぶことができます、マネージャーは彼が管理する人々のコレクションを持っています、人々はすべてIPersonを実装しますが、人々のタイプは異なっています。私はこのマネージャーをツリーに表示したいと思っています。マネージャーノードの下では、管理しているすべてのプロジェクトを表示したいと思います。管理しているプロジェクトから決定することができます。ItemsSource + Converter + Treeview wont update
したがって、コンバータを使用して人をプロジェクトのリストに変換することを計画しています。ここでXAMLは次のとおりです。
<HierarchicalDataTemplate DataType="{x:Type ui:Manager}">
<TextBlock Text="{Binding Path=Name}"/>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate.ItemsSource>
<Binding Path="People">
<Binding.Converter>
<configUtil:ProjectListConverter/>
</Binding.Converter>
</Binding>
</HierarchicalDataTemplate.ItemsSource>
</HierarchicalDataTemplate>
私のPersonクラスはINotifyPropertyChangedのを実装し、人々を保持しているリストはINotifyCollectionChanged.Thisコードは、私がツリービューのItemsSourceを設定すると、管理者は、プロジェクトの自分のリストに表示されている素晴らしい作品実装します。
ただし、人のリストに新しい人物を追加すると、ツリービューは更新されません。デバッグすると、Addアクションと追加されたアイテムでCollectionChangedが起動していることがわかります。また、CollectionChangedイベントはnullではないので、私はUIがそれを見ていることを知っています。ただし、アイテムが追加されたときにConverterは実行されません。ここ
はIPersonオブジェクトを保持するリストのAddメソッドである:
public void Add(T item)
{
list.Add(item);
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item));
}
私は何とかデータバインディングを壊すだろうか?
他に何が確認できますか?
ConverterはPeopleリストの各項目を調べ、自分がどのプロジェクトを担当しているかを把握し、プロジェクト名を出力リストに追加します。
あなたの言うことを理解していると思いますが、hierarcicalDataTemplateを使用してそれを行う方法がわかりません。私が正しく理解していれば、PeopleViewをCollectionViewにラップし、コレクションが変更されたときにCollectionViewを更新したいと思っています。いくつかのコード例は大きな助けになるでしょう。 – Kelly
助けてくれてありがとう、私は人々コレクションの変更イベントを購読し、それ自身を更新したプロジェクトのObservableCollectionに自分の人リストをラップすることによってそれを働かせました。 – Kelly