Csharp/C#教程:获取TreeView中所选项的TreeViewItem分享


获取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

(0)
上一篇 2021年12月23日
下一篇 2021年12月23日

精彩推荐