我有一个显示我的ViewModel的WPF TreeView。我有一个按钮,它将一个项添加到底层ViewModel中的一个集合中,该集合将一个子节点添加到树中。这部分有效。
我想要的是新添加的项目是树视图的SelectedItem。
我已经读过这个:How to programmatically select an item in a WPF TreeView?但它没有用,因为我添加到Tree的项目不是TreeViewItems,它们是我模型中的类。
我也读过这个:Simplifying the WPF TreeView by Using the ViewModel Pattern但是我不想为我添加到TreeView的每个项目创建一个ViewModel。我觉得它会造成不必要的冗余对象。即我的ViewModel具有IsSelected属性,该属性包装我没有IsSelected属性的Model。这对我的实际ViewModel工作造成了太大的麻烦。
有没有告诉TreeView选择新添加的项目?以编程方式或通过XAML。
感谢。
答案 0 :(得分:1)
我认为没有任何直接方法可以选择新添加的项目到TreeView,因为TreeView本身并不知道更改。 TreeViewItem是在扩展时生成的,每个TreeViewItem本身都是一个ItemsControl,为子女管理自己的容器。
也许有可能在加载时扩展整个TreeView并获取每个容器的ObservableCollection,然后监听CollectionChanged事件,但由于View不知道集合的类型,因此IList可能是它能做的最好的而且我们没有CollectionChanged事件,所以我没有看到它。但也许我错过了什么......
无论如何,我会使用这种方法(我看到你已经看过了),因为它可能会给你带来最少的麻烦,但如果你想出一个更好的解决方案,我会很高兴知道什么是是: - )
<TreeView ...>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>