5

親ノードが展開されているときに子ノードのみをロードする方法はありますか? 私が直面している問題は、ノードに子がない場合、「展開」アイコンが表示されないことです。アイコンがクリックされるまで子をロードしたくないので、少しキャッチ 22 が残っています。

4

4 に答える 4

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」にバインドします。

于 2009-10-08T06:09:29.570 に答える
1

ツリー ビューでは、通常、表示されている各ノードの子をロードする必要があります。

したがって、ルートのみを表示する場合は、ルートの子もロードする必要があります。ルートを展開したら、それらの子に展開するものが必要な場合は、各子の子をロードする必要があります。

于 2008-11-22T08:11:06.973 に答える
1

必要に応じてツリー コントロールに子ノードをロードさせることは完全に可能であり、Silverlight TreeView を使用してこれを行うことができます。たとえば、このデータがデータベースからのものである場合にルート ノードにデータを入力すると、各ノードに子があるかどうかも返されます。子がある場合は、ダミーの子を 1 つ追加すると、コントロールの隣に + が配置されますそれ。展開されたイベントを処理し、これで子がダミー ノードであるかどうかを確認し、ダミー ノードである場合は削除し、データベースから子を取得して追加します。

于 2009-01-15T16:54:47.713 に答える
0

私もこれを見ていました。必要に応じて子ノードをロードする TreeNode の独自のサブクラスを作成する必要があると思います。
Windows フォーム TreeView で使用した 1 つのアプローチは、各ノードに空の子ノードを追加し、ノードが展開されて実際の子ノードが必要になったときにこれを削除することでした。このアプローチの問題は、偽の展開可能なノードが得られることですが、それを受け入れることができれば、それは簡単な解決策です。

于 2008-11-22T09:28:25.213 に答える