我有一个使用HierarchicalDataTemplate
绑定数据的TreeView
。
它看起来是这样的:
<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
。但是,如果我使用:
this.mainTreeList.SelectedItem;
selectedItem的类型为MyTreeViewItemViewModel
。但我想要的是'parent‘或'bound’TreeViewItem
。我不会将其传递给我的TreeViewItemModel
对象(甚至不知道如何传递)。
我该怎么做呢?
发布于 2009-03-06 03:03:08
从Bea Stollnitz关于这一点的博客文章中,尝试
TreeViewItem item = (TreeViewItem)(mainTreeList
.ItemContainerGenerator
.ContainerFromIndex(mainTreeList.Items.CurrentPosition));
发布于 2011-09-22 01:20:46
我遇到了同样的问题。我需要找到TreeViewItem,这样我才能让它被选中。然后我意识到,我可以只向我的ViewModel添加一个属性IsSelected,然后将其绑定到TreeViewItems IsSelectedProperty。这可以通过ItemContainerStyle实现:
<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即可。
希望这能帮助到别人。
发布于 2013-01-09 18:39:21
TreeViewItem item = (TreeViewItem)(mainTreeList
.ItemContainerGenerator
.ContainerFromIndex(mainTreeList.Items.CurrentPosition)); gives first item in the TreeView because CurrentPosition is always 0.
怎么样
TreeViewItem item = (TreeViewItem)(mainTreeList
.ItemContainerGenerator
.ContainerFromItem(mainTreeList.SelectedItem)));
这对我来说更好。
https://stackoverflow.com/questions/616948
复制相似问题