WPFは、TreeViewItemコンテナを手動で生成します
-
30-09-2019 - |
質問
実行時にツリービューを作成しています。いくつかのノード(TreeViewItem)があり、それぞれに名前があります。最初は崩壊します。別のコンボボックスには、すべてのtreeViewItemの名前が表示されます。選択された名前に基づいてTreeViewitemを強調表示する必要があります。私は再帰関数を使用しており、次のようなTreeViewItemコンテナを取得します。
if (parent.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
continue;
TreeViewItem container = parent.ItemContainerGenerator.ContainerFromItem(child).As<TreeViewItem>();
しかし、そうです
parent.itemcontainergenerator.status = generatorstatus.notstarted
すべての崩壊したアイテムについて。それらのために手動で(拡張せずに)コンテナを生成するにはどうすればよいですか?
解決
ビジュアルツリーを歩いているときはいつでも、ビューモデルの構築について真剣に考える必要があります。
ビューモデルは、直面している問題の種類を心配することなく、TreeViews機能を増やすことができます。
アプリケーションのビューモデルには、いくつかの追加プロパティがあります
IsSelected
IsExpanded
IsHighlighted
あなたと同様に
Data
次に、(ItemContainerStyleを使用して)発行され、ハイライト化され、ツリービューイテムに拡張され、これらのビューモデルのコレクションを作成したので、ビューモデルで検索を行い、プロパティを設定することができます。ビューモデルが応答し、スタイルへのバインディングのために、必要に応じてtreeViewItemを強調します。また、上記のすべてのノードを展開するようなファンキーなこともできます。ツリービューはこれに応答します。
ツリービューと組み合わせるとビューモデルは、はるかに柔軟性が得られ、視覚的なツリークロールエクササイズを停止します(これはハックであり、汚れていると感じます)
がここにあります ViewModelとTreeViewに関する良い記事...