2

実行時にTreeViewを作成しています。複数のノード(TreeViewItem)があり、それぞれに名前が付いています。最初は折りたたまれています。別のコンボボックスには、すべてのTreeViewItemの名前が表示されます。選択した名前に基づいてTreeViewItemを強調表示する必要があります。私は再帰関数を使用していて、次のようなTreeViewItemコンテナーを取得します。

if (parent.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
                continue;

TreeViewItem container = parent.ItemContainerGenerator.ContainerFromItem(child).As<TreeViewItem>();

でもそれは

parent.ItemContainerGenerator.Status = GeneratorStatus.NotStarted

折りたたまれたすべてのアイテム。それらのコンテナを手動で(拡張せずに)生成するにはどうすればよいですか?

4

1 に答える 1

3

ビジュアルツリーを歩いていることに気付いたときはいつでも、ビューモデルの構築について真剣に考える必要があります。

ビューモデルは、直面している問題の種類を気にすることなく、ツリービューの機能を向上させることができます。

アプリケーションのビューモデルには、いくつかの追加のプロパティがあります

IsSelected

IsExpanded

IsHighlighted

だけでなく、

Data

次に、(ItemContainerStyleを使用して)IsSelected、IsHighlighted、およびIsExpandedをTreeViewItemにバインドします。次に、これらのビューモデルのコレクションがあるので、ビューモデルで検索を実行し、プロパティIsHighlightedを設定するだけです。次に、ビューモデルが応答し、スタイルにバインドされているため、必要に応じてtreeviewitemが強調表示されます。また、上記のすべてのノードを展開するようなファンキーなこともできます。ツリービューはこれに応答します。

ビューモデルをツリービューと組み合わせると、柔軟性が大幅に向上し、視覚的なツリークロールの演習(ハックであり、汚れていると感じる)が停止します。

ここにViewModelとTreeViewについての良い記事があります...

于 2010-04-22T07:52:26.020 に答える