ItemSource更改后,在TreeView中展开Root

| 我在带有TreeView的Silverlight 4应用程序中有一个ChildWindow。 ItemSource绑定到ViewModel中的ObservableCollection of Items。窗口打开时,将从Web服务加载该项目。 我只有一个根节点,因此我需要对其进行初始扩展。 TreeView甚至具有扩展名ExpandToDepth(),这似乎很完美,但我不知道在哪里可以调用它。我没有找到从ItemSource更新项目后发生的事件。 我尝试在TreeView中使用ItemContainerGenerator.ItemChanged和OnItemsChanged,但是它们都在生成树视图项目之前执行,因此展开命令将无法使用。 我该如何工作?     
已邀请:
尝试注册您的ObservableCollection \的CollectionChange事件,然后在该处执行操作。     
从TreeView派生并创建IsRootItemExpanded属性,并在ViewModel中创建相同的名称属性。在set accesser中,检查值是否为true,然后像这样ExpandToDepth(1)那样调用您的方法:当需要更新itemssource时,请将IsRootItemExpanded属性设置为true。您必须将TreeView的IsRootItemExpanded绑定到ViewModel的IsRootItemExpanded。     
我通过重写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);
    }
}
感谢所有回应。     

要回复问题请先登录注册