Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF Treeview-如何自动展开父节点并选择新节点_C#_Wpf_Treeview_Datatemplate_Hierarchicaldatatemplate - Fatal编程技术网

C# WPF Treeview-如何自动展开父节点并选择新节点

C# WPF Treeview-如何自动展开父节点并选择新节点,c#,wpf,treeview,datatemplate,hierarchicaldatatemplate,C#,Wpf,Treeview,Datatemplate,Hierarchicaldatatemplate,我将模型对象设置为: public class Model { public ObservableCollection<Model> Children{get;set;} public string Name{get;set;} } 公共类模型 { 公共可观测集合子项{get;set;} 公共字符串名称{get;set;} } 这给了我一个任意大小和深度的模型对象树。我使用分层数据模板在WPF树视图中显示这些。由于ObservableCollection,我可以在

我将模型对象设置为:

public class Model
{
    public ObservableCollection<Model> Children{get;set;}
    public string Name{get;set;}
}
公共类模型
{
公共可观测集合子项{get;set;}
公共字符串名称{get;set;}
}
这给了我一个任意大小和深度的模型对象树。我使用分层数据模板在WPF树视图中显示这些。由于ObservableCollection,我可以在模型树中的任何位置添加模型对象,UI将相应地更新

令人烦恼的是,例如,即使在第三级添加了新的模型对象,它也可能不会立即可见

当在树中的任意位置添加新模型对象时,我希望TreeView自动选择新节点,并将其父节点展开,以使其立即对用户可见。这似乎不是很明显

我不想做的是用只有在特定WPF控件中才有意义的属性污染模型对象。我也不想将父属性添加到模型中


看来这件事以前一定有人解决过。有人知道如何解决这个问题吗?

在模型中创建两个属性,如下所示 我扩张并当选

并在您的treeview ItemContainerStyle中添加以下设置器

<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
<Setter Property="IsExpanded" Value="{Binding IsExpanded}"/>


Noe每次在viewmodels中设置这两个属性时,都会选择/扩展相应的treeviewitem

谢谢,但正如我在问题中所说的,我不想“用仅在特定WPF控件中有意义的属性污染模型对象。我也不想向模型添加父属性”-要使用您的建议,我需要做这两件事。您不需要将这些属性添加到模型中,但ViewModels肯定可以正确使用这些属性?(所有逻辑都发生在这里)。您是否直接将视图绑定到模型而不必查看viewmodels?显然这是一个简化的示例,但IsSelected和IsExpanded是视图的属性,而不是模型/ViewModel。我仍然需要添加一种方法,通过模型的父级遍历树,以扩展每个父级。我想避免两件事。为了清晰起见,我还忽略了其他一些复杂的因素,比如我的TreeView绑定到模型树上,但是ValueConverter将每一个绑定到一个ViewModel中。ViewModel对其父对象一无所知,也不需要知道。谢谢。我不知道还有什么建议。在我们的项目中,我在集合项ViewModel中实现了这些属性,每当在该ViewModel中调用addchild方法时,我只需将Child.IsSelected=true和this.IsExpanded=true。这使我能够展开刚刚添加了子项的节点,并选择子项。另外,我不认为在viewmodels中使用两个bool控制treeview操作有什么错(我知道这有点打破了MVVM模式,但我想这是一条细线)好的luck@RBT您不会污染模型,也不希望直接绑定到它。这就是ViewModel的全部用途。。。