2

こんにちは私はツリーの一部であるインターフェースIFooNodeを使用しています。
HierarchicalDataTemplateを使用して、このツリーをTreeViewに表示したかったのです。ただし、これはインターフェイスが原因で機能しません。どちらも私が「いい」と呼ぶものではないという2つの方法があります

  1. どのタイプが実際にIFooNodeを実装しているかを調べ(FooNodeと呼びましょう...)、FooNodeを定義するアセンブリを見つけ、そのアセンブリへの参照を追加して、FooNodeのHierarchicalDataTemplateを作成します(Implementatingクラスが変更されないことを期待しています...)

  2. IFooNodeをラップするクラスMyCoolIFooNodeWrapperForWpfを作成し、ツリーにバインドせずに、ツリールートからMyCoolIFooNodeWrapperForWpfのリストを入力し、MyCoolIFooNodeWrapperForWpfのHierarchicalDataTemplateを作成します。

データの種類に関係なく、どういうわけか常にHierarchicalDataTemplateを適用できますか(これはそれほど悪ではないと思います...)

他のアイデアはありますか?

4

2 に答える 2

2

ItemTemplateSelectorを使用できます。セレクターのコードで、データオブジェクトが実装するインターフェイスを確認し、このアイテムに適切なDataTemplate/HeirarchicalDataTemplateを選択できます。

セレクターは、コンテナー自体(ItemsControl.ItemTemplateSelector)と階層データテンプレート(HeirarchicalDataTemplate.ItemTemplateSelector)の両方に適用できます。

これはそれほど悪いことではないと思います。

于 2010-12-26T16:26:30.040 に答える
0

複数のテンプレートから選択しない場合は、テンプレートでデータ型を指定する必要はありません。ツリー内のすべてのオブジェクトがインターフェイスを実装している場合は、そのインターフェイスのプロパティを使用してテンプレートに固執するだけで、準備は完了です。テンプレートをそのインターフェイスに固有にするために、テンプレートで何もする必要はありません。

何らかの理由で、オブジェクトがサポートするインターフェイスに基づいてテンプレートを選択する必要がある場合は、テンプレートセレクターを実装し、WPFの組み込みのテンプレート選択メカニズムがインターフェイスを使用できないようにする多対1の問題に対処する必要があります。そもそも。(つまり、のテンプレートIFooとのテンプレートがある場合、IBarをサポートするオブジェクトにどのテンプレートを使用しますか?)IFoo IBar

于 2010-12-26T22:01:52.307 に答える