代码之家  ›  专栏  ›  技术社区  ›  Adam

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

  •  1
  • Adam  · 技术社区  · 15 年前

    我有一个WPF TreeView,它显示我的ViewModel。我有一个按钮,它将一个项添加到基础ViewModel的集合中,该集合将一个子节点添加到树中。这部分有效。

    我希望新添加的项成为树视图的SelectedItem。

    我已经读过了: How to programmatically select an item in a WPF TreeView? 但它不起作用,因为我添加到树中的项不是TreeViewItems,而是模型中的类。

    Simplifying the WPF TreeView by Using the ViewModel Pattern 但是,我不想为添加到TreeView的每个项创建ViewModel。我觉得这会造成不必要的多余物体。i、 e.我的ViewModel有一个IsSelected属性,该属性包装了没有IsSelected属性的模型。这导致我在使用实际的ViewModel时过于粗糙。

    有没有告诉TreeView选择新添加的项目?以编程方式或通过XAML。

    谢谢。

    1 回复  |  直到 9 年前
        1
  •  1
  •   Fredrik Hedblad    15 年前

    我不认为有任何直接的方法可以选择一个新添加到TreeView中的项,因为TreeView本身并不知道这个更改。TreeViewItem在扩展时生成,并且每个TreeViewItem本身都是一个ItemsControl,为其子级管理自己的容器。
    也许有可能在加载时扩展整个TreeView,并为每个容器获取可观的集合,然后侦听CollectionChanged事件,但是由于视图不知道集合的类型,所以IList可能是它所能做的最好的,在那里我们没有CollectionChanged事件,所以我看不到它。但也许我遗漏了什么。。

    <TreeView ...>
        <TreeView.ItemContainerStyle>
            <Style TargetType="{x:Type TreeViewItem}">
                <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
            </Style>
        </TreeView.ItemContainerStyle>
    </TreeView>