首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从HierarchicalDataTemplate项目中获取TreeViewItem?

如何从HierarchicalDataTemplate项目中获取TreeViewItem?
EN

Stack Overflow用户
提问于 2009-03-05 22:27:29
回答 9查看 50.7K关注 0票数 36

我有一个使用HierarchicalDataTemplate绑定数据的TreeView

它看起来是这样的:

代码语言:javascript
复制
<TreeView x:Name="mainTreeList" ItemsSource="{Binding MyCollection}>
  <TreeView.Resources>
    <HierarchicalDataTemplate 
     DataType="{x:Type local:MyTreeViewItemViewModel}" 
     ItemsSource="{Binding Children}">
      <!-- code code code -->
    </HierarchicalDataTemplate>
  </TreeView.Resources>
</TreeView>

现在,从主窗口的代码隐藏中,我希望获得当前选择的TreeViewItem。但是,如果我使用:

代码语言:javascript
复制
this.mainTreeList.SelectedItem;

selectedItem的类型为MyTreeViewItemViewModel。但我想要的是'parent‘或'bound’TreeViewItem。我不会将其传递给我的TreeViewItemModel对象(甚至不知道如何传递)。

我该怎么做呢?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-03-06 03:03:08

Bea Stollnitz关于这一点的博客文章中,尝试

代码语言:javascript
复制
TreeViewItem item = (TreeViewItem)(mainTreeList
    .ItemContainerGenerator
    .ContainerFromIndex(mainTreeList.Items.CurrentPosition));
票数 24
EN

Stack Overflow用户

发布于 2011-09-22 01:20:46

我遇到了同样的问题。我需要找到TreeViewItem,这样我才能让它被选中。然后我意识到,我可以只向我的ViewModel添加一个属性IsSelected,然后将其绑定到TreeViewItems IsSelectedProperty。这可以通过ItemContainerStyle实现:

代码语言:javascript
复制
<TreeView>
            <TreeView.ItemContainerStyle>
                <Style TargetType="{x:Type TreeViewItem}">
                    <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/>
                    <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
                </Style>
            </TreeView.ItemContainerStyle>
</TreeView>

现在,如果我想在树视图中选择一个项目,只需直接在ViewModel类上调用IsSelected即可。

希望这能帮助到别人。

票数 9
EN

Stack Overflow用户

发布于 2013-01-09 18:39:21

代码语言:javascript
复制
TreeViewItem item = (TreeViewItem)(mainTreeList
    .ItemContainerGenerator
    .ContainerFromIndex(mainTreeList.Items.CurrentPosition)); gives first item in the TreeView because CurrentPosition is always 0.

怎么样

代码语言:javascript
复制
TreeViewItem item = (TreeViewItem)(mainTreeList
    .ItemContainerGenerator
    .ContainerFromItem(mainTreeList.SelectedItem)));

这对我来说更好。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/616948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档