获取TreeView中所选项的TreeViewItem
我有一个TreeView绑定到具有父子关系的数据集。 我将如何从TreeView获取seleted TreeViewItem? 请帮我。 我的代码如下。
XAML: –
public MainWindow() { InitializeComponent(); DataSet ds = new BL.BLMenu().GetAllMenues(new BOModule { Name = Modules.Personnel }); ds.Tables[0].TableName = "Menu"; DataRelation relation = new DataRelation("rsParentChild", ds.Tables["Menu"].Columns["MenuId"], ds.Tables["Menu"].Columns["ParentId"]); relation.Nested = true; ds.Relations.Add(relation); BOMenu mnu = new BOMenu(); BOMenu.RootNodes = ds.Tables["Menu"].DefaultView; BOMenu.RootNodes.RowFilter = "ParentId IS NULL"; this.DataContext = this; stbiDate.Content = DateTime.Now; } public DataView RootNodes { get { return BOMenu.RootNodes; } }
BOMenu类: –
public class BOMenu { public string MenuId { get; set; } public string Name { get; set; } public string ParentId { get; set; } public int Priority { get; set; } public static DataView RootNodes { get; set; } }
尝试
TreeViewItem tvi = myTree.ItemContainerGenerator.ContainerFromItem(SelectedItem) as TreeViewItem;
或者通过以下链接。希望这有帮助
数据绑定到WPF Treeview中的SelectedItem
从TreeView获取SelectedItem?
https://social.msdn.microsoft.com/forums/en-US/wpf/thread/36aca7f7-0b47-488b-8e16-840b86addfa3/
虽然biju的答案适用于平面层次结构,但我不得不寻找HierarchicalDataTemplates的解决方案。 这是对我有用的扩展方法:
public static TreeViewItem ContainerFromItemRecursive(this ItemContainerGenerator root, object item) { var treeViewItem = root.ContainerFromItem(item) as TreeViewItem; if (treeViewItem != null) return treeViewItem; foreach (var subItem in root.Items) { treeViewItem = root.ContainerFromItem(subItem) as TreeViewItem; var search = treeViewItem?.ItemContainerGenerator.ContainerFromItemRecursive(item); if (search != null) return search; } return null; }
你可以用它
TreeViewItem tvi = treeView .ItemContainerGenerator .ContainerFromItemRecursive(treeView.SelectedItem);
这适用于通过HierarchicalDataTemplate绑定数据源的树
处理TreeViewItem.Selected
并将TreeViewItem设置为标记。
private void TreeViewItem_OnItemSelected(object sender, RoutedEventArgs e) { mTreeView.Tag = e.OriginalSource; }
您可以稍后检索
TreeViewItem tvi = mTreeView.Tag as TreeViewItem;
我发现的最佳解决方案涉及一个简单的辅助方法,几乎可以用于任何TreeView的事件(即SelectedItemChanged,MouseLeftButtonUp等)。
TreeViewItem Item = TreeViewHelper.VisualUpwardSearch(e.OriginalSource as DependencyObject);
我正在使用多个层次结构数据模板,这是唯一适用于我的方法。 现在,我能够基于TreeView创建一个新控件,并且可以在内部处理涉及所选项的所有事件。
上述就是C#学习教程:获取TreeView中所选项的TreeViewItem分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public static TreeViewItem VisualUpwardSearch(DependencyObject source) { while (source != null && !(source is TreeViewItem)) source = System.Windows.Media.VisualTreeHelper.GetParent(source); return source as TreeViewItem; }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/988122.html