親ノードが展開されているときに子ノードのみをロードする方法はありますか? 私が直面している問題は、ノードに子がない場合、「展開」アイコンが表示されないことです。アイコンがクリックされるまで子をロードしたくないので、少しキャッチ 22 が残っています。
4 に答える
まず、この投稿を読んでください: http://bea.stollnitz.com/blog/?p=55
次に、TreeViewItem と TreeView を継承します。
public class TreeViewItemEx : TreeViewItem {
protected override DependencyObject GetContainerForItemOverride() {
TreeViewItemEx tvi = new TreeViewItemEx();
Binding expandedBinding = new Binding("IsExpanded");
expandedBinding.Mode = BindingMode.TwoWay;
tvi.SetBinding(TreeViewItemEx.IsExpandedProperty, expandedBinding);
return tvi;
}
}
public class TreeViewEx : TreeView {
protected override DependencyObject GetContainerForItemOverride() {
TreeViewItemEx tvi = new TreeViewItemEx();
Binding expandedBinding = new Binding("IsExpanded");
expandedBinding.Mode = BindingMode.TwoWay;
tvi.SetBinding(TreeViewItemEx.IsExpandedProperty, expandedBinding);
return tvi;
}
}
3 番目に、モデルのプロパティを「IsExpanded」にバインドします。
ツリー ビューでは、通常、表示されている各ノードの子をロードする必要があります。
したがって、ルートのみを表示する場合は、ルートの子もロードする必要があります。ルートを展開したら、それらの子に展開するものが必要な場合は、各子の子をロードする必要があります。
必要に応じてツリー コントロールに子ノードをロードさせることは完全に可能であり、Silverlight TreeView を使用してこれを行うことができます。たとえば、このデータがデータベースからのものである場合にルート ノードにデータを入力すると、各ノードに子があるかどうかも返されます。子がある場合は、ダミーの子を 1 つ追加すると、コントロールの隣に + が配置されますそれ。展開されたイベントを処理し、これで子がダミー ノードであるかどうかを確認し、ダミー ノードである場合は削除し、データベースから子を取得して追加します。
私もこれを見ていました。必要に応じて子ノードをロードする TreeNode の独自のサブクラスを作成する必要があると思います。
Windows フォーム TreeView で使用した 1 つのアプローチは、各ノードに空の子ノードを追加し、ノードが展開されて実際の子ノードが必要になったときにこれを削除することでした。このアプローチの問題は、偽の展開可能なノードが得られることですが、それを受け入れることができれば、それは簡単な解決策です。