WPF树视图添加到树时选择项目

时间:2010-10-31 20:08:09

标签: c# .net wpf xaml treeview

我有一个显示我的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。

感谢。

1 个答案:

答案 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>