gpt4 book ai didi

c# - 如何从 ViewModel 调用 Focus on TreeView

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:44 24 4
gpt4 key购买 nike

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

我已成功地向 View 添加展开/折叠所有功能 - 遍历 TreeView 中的所有项目,设置 IsExpanded,然后在 TreeView 上调用 Focus 以刷新更改。

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

我当前的任务和问题是自动选择 TreeView 中任何新添加的项目。 TreeViewItems 的 IsSelected 和 IsExpanded 属性绑定(bind)到 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 属性绑定(bind)到 TreeView 的 ItemsSource 属性。子节点以编程方式添加到根节点的 Children 属性中,并相互添加。

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

最佳答案

在资源中添加如下样式

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

这将使每个新的 TreeViewItem 在创建时聚焦自身

试一试,看看这是不是你要找的

关于c# - 如何从 ViewModel 调用 Focus on TreeView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26379153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com