如何从ViewModel调用TreeView的TreeView

时间:2014-10-15 09:36:21

标签: c# wpf mvvm treeview

我们在MVVM C#WPF应用程序中使用TreeView控件。

我已成功向View添加了Expand / Collapse All功能 - 遍历TreeView中的所有Items,设置IsExpanded,然后在TreeView上调用Focus以刷新更改。

当单击TreeView中的空白区域时,我还成功添加了清除TreeView中当前所选项的功能。

我目前的任务和问题是在TreeView中自动选择任何新添加的项目。 TreeViewItems的IsSelected和IsExpanded属性绑定到ViewModel中的匹配属性,并且只要展开父节点,ViewModel上的IsSelected设置就可以工作。

我已尝试在父ViewModel上设置IsExpanded但据我所知,我需要在TreeView上调用Focus以强制它更新并扩展其树的表示。由于我在ViewModel中,因此在没有破坏MVVM的情况下,我没有连接到TreeView。

我该如何做到这一点?

编辑:为pushpraj添加了来源

树项目存储如下:

private ObservableCollection<NodeViewModel> _children = new ObservableCollection<NodeViewModel>();
public ObservableCollection<NodeViewModel> Children
{
    get { return _children; }
    set
    {
        _children = value;
        OnPropertyChanged("Children", this);
    }
}

我们的根节点的Children属性绑定到TreeView的ItemsSource属性。子节点以编程方式添加到根节点的Children属性中,并相互添加。

我正在使用的来源不是我自己的,我对WPF没有过多的经验,所以如果我给你错误的信息,请原谅我。我还注意到我们在Gong Solutions的TreeView中使用了一些拖放功能。这可能是我们问题的原因吗?在我们的ViewModel中将IsExpanded设置为true不会在树视图中展开条目。

1 个答案:

答案 0 :(得分:2)

在资源中添加以下样式

<Style TargetType="{x:Type TreeViewItem}">
    <Setter Property="FocusManager.FocusedElement"
            Value="{Binding RelativeSource={RelativeSource Self}}" />
</Style>

这将使每个新的TreeViewItem在创建时都能自己聚焦

尝试一下,看看这是否是您正在寻找的

相关问题