我在带有TreeView的Silverlight 4应用程序中有一个ChildWindow。 ItemSource绑定到ViewModel中的ObservableCollection项。当窗口打开时,项目将从Web服务加载。
我只有一个根节点,我需要它最初扩展。 TreeView甚至还有扩展名ExpandToDepth(),看起来很完美,但我不知道我可以在哪里调用它。我没有找到从ItemSource更新项目后发生的事件。
我尝试在TreeView中使用ItemContainerGenerator.ItemChanged和OnItemsChanged但它们都是在生成树视图项之前执行的,因此expand命令将不起作用。
我怎样才能让它发挥作用?
答案 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);
}
}
感谢所有回复的人。