当ItemSsource更改时,在树视图中展开Root

时间:2011-04-15 09:37:44

标签: silverlight data-binding mvvm treeview

我在带有TreeView的Silverlight 4应用程序中有一个ChildWindow。 ItemSource绑定到ViewModel中的ObservableCollection项。当窗口打开时,项目将从Web服务加载。

我只有一个根节点,我需要它最初扩展。 TreeView甚至还有扩展名ExpandToDepth(),看起来很完美,但我不知道我可以在哪里调用它。我没有找到从ItemSource更新项目后发生的事件。

我尝试在TreeView中使用ItemContainerGenerator.ItemChanged和OnItemsChanged但它们都是在生成树视图项之前执行的,因此expand命令将不起作用。

我怎样才能让它发挥作用?

3 个答案:

答案 0 :(得分:1)

尝试注册ObservableCollection的CollectionChange事件并在那里进行操作。

答案 1 :(得分:0)

从TreeView派生并创建IsRootItemExpanded属性并在ViewModel中创建相同的名称属性。在set accesser中检查值是否为true然后像这样调用你的方法ExpandToDepth(1)当需要更新itemssource时,然后将IsRootItemExpanded属性设置为true。您必须将TreeView的IsRootItemExpanded绑定到ViewModel的IsRootItemExpanded。

答案 2 :(得分:0)

我通过覆盖TreeView中的PrepareContainerForItemOverride方法解决了我的问题。我想知道为什么这只是为根节点调用但它可以工作。

public class ExpandedRootTreeView : TreeView
{
    protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
    {
        TreeViewItem treeViewItem = element as TreeViewItem;

        if (treeViewItem != null) treeViewItem.IsExpanded = true;

        base.PrepareContainerForItemOverride(element, item);
    }
}

感谢所有回复的人。