データバインドされた ObservableCollections からすべてのアイテムを作成する TreeView があります。GameNode オブジェクトの階層があり、各オブジェクトには 2 つの ObservableCollections があります。1 つのコレクションには EntityAttrib オブジェクトがあり、もう 1 つのコレクションには GameNode オブジェクトがあります。GameNode オブジェクトはフォルダーを表し、EntityAttrib はファイルを表すと言えます。同じ TreeView に attrib と GameNode の両方を表示するには、Multibinding を使用します。これはすべて起動時に正常に機能しますが、新しい GameNode を階層のどこかに追加すると、TreeView は更新されません。コンバーター メソッドにブレークポイントを設定しましたが、新しい GameNode を追加するときに呼び出されません。ObservableCollection が MultiBinding に変更を通知していないようです。MultiBinding をコメントアウトして、GameNode コレクションのみをバインドすると、期待どおりに動作します。
XAML:
<HierarchicalDataTemplate DataType="{x:Type local:GameNode}">
<HierarchicalDataTemplate.ItemsSource>
<MultiBinding Converter="{StaticResource combineConverter}">
<Binding Path="Attributes" />
<Binding Path="ChildNodes" />
</MultiBinding>
</HierarchicalDataTemplate.ItemsSource>
<TextBlock Text="{Binding Path=Name}" ContextMenu="{StaticResource EntityCtxMenu}"/>
</HierarchicalDataTemplate>
C#:
public class GameNode
{
string mName;
public string Name { get { return mName; } set { mName = value; } }
GameNodeList mChildNodes = new GameNodeList();
public GameNodeList ChildNodes { get { return mChildNodes; } set { mChildNodes = value; } }
ObservableCollection<EntityAttrib> mAttributes = new ObservableCollection<EntityAttrib>();
public ObservableCollection<EntityAttrib> Attributes { get { return mAttributes; } set { mAttributes = value; } }
}
GameNodeList はサブクラス化された ObservableCollection です