Silverlight TreeView - 扩展节点时加载数据

时间:2008-11-21 22:32:26

标签: silverlight silverlight-toolkit

有没有办法只在父节点展开时加载子节点?我遇到的问题是,如果某个节点没有任何子节点,则不会显示“展开”图标。因为我不想在点击图标之前加载孩子,所以我留下了一点点捕捉。

4 个答案:

答案 0 :(得分: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;
    }
}

第三,将Model的属性绑定到“IsExpanded”。

答案 1 :(得分:1)

使用树视图,您通常必须加载每个显示节点的子节点。

因此,如果您只显示根,则还需要加载根目录。扩展根目录后,如果您想为这些孩子进行扩展,则需要加载每个孩子的子女。

答案 2 :(得分:1)

完全可以让树控件按需加载子节点,您可以使用Silverlight TreeView执行此操作。当您填充根节点时,如果其数据来自数据库,那么对于每个节点也会返回它是否有子节点,如果确实添加了一个虚拟子节点,这将使控件放在+旁边它。处理展开的事件,并查看子节点是否为虚节点,如果删除它,则从数据库中获取子节点并添加它们。

答案 3 :(得分:0)

我也在看这个。我认为您需要编写自己的TreeNode子类,根据需要加载子节点 我在Windows窗体TreeView中使用的一种方法是向每个节点添加一个空子节点,然后在展开节点并需要真实子节点时将其删除。这种方法的问题在于你得到了错误的可扩展节点,但如果你能接受它,那么它就是一个简单的解决方案。