我有一个TreeView
使用a HierarchicalDataTemplate
绑定其数据.
它看起来像这样:
现在,从主窗口的代码隐藏,我想得到当前选择TreeViewItem
.但是,如果我使用:
this.mainTreeList.SelectedItem;
selectedItem属于类型MyTreeViewItemViewModel
.但我想得到'父母'或'约束' TreeViewItem
.我没有把它传递给我的TreeViewItemModel
对象(甚至不知道如何).
我怎样才能做到这一点?
TreeViewItem item = (TreeViewItem)(mainTreeList .ItemContainerGenerator .ContainerFromIndex(mainTreeList.Items.CurrentPosition));
不使用(对我来说)作为使用HierarchicalDataTemplate的树视图中的mainTreeList.Items.CurrentPosition将始终为-1.
同样没有下文如为mainTreeList.Items.CurrentItem在使用HierarchicalDataTemplate永远是空树视图.
TreeViewItem item = (TreeViewItem)mainTreeList .ItemContainerGenerator .ContainerFromItem(mainTreeList.Items.CurrentItem);
INSTEAD我必须在路由的TreeViewItem.Selected事件中设置最后一个选定的TreeViewItem,它会冒泡到树视图(TreeViewItem本身在设计时不存在,因为我们使用的是HierarchicalDataTemplate).
事件可以在XAML中捕获,如下所示:
然后可以在事件中设置最后选择的TreeViewItem,如下所示:
private void TreeViewItemSelected(object sender, RoutedEventArgs e) { TreeViewItem tvi = e.OriginalSource as TreeViewItem; // set the last tree view item selected variable which may be used elsewhere as there is no other way I have found to obtain the TreeViewItem container (may be null) this.lastSelectedTreeViewItem = tvi; ... }
从Bea Stollnitz关于此的博客文章中试试
TreeViewItem item = (TreeViewItem)(mainTreeList .ItemContainerGenerator .ContainerFromIndex(mainTreeList.Items.CurrentPosition));
我遇到了同样的问题.我需要访问TreeViewItem,以便我可以选择它.然后我意识到我可以在我的ViewModel中添加一个属性IsSelected,然后将其绑定到TreeViewItems IsSelectedProperty.这可以通过ItemContainerStyle实现:
现在,如果我想在树视图中选择一个项目,我只需直接在我的ViewModel类上调用IsSelected.
希望它可以帮助某人.
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)));
这对我来说效果更好.