Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在获取树视图中选定项的树视图项_C#_Wpf - Fatal编程技术网

C# 正在获取树视图中选定项的树视图项

C# 正在获取树视图中选定项的树视图项,c#,wpf,C#,Wpf,我有一个树视图,它绑定到具有父子关系的数据集。如何从树视图中选择树视图项?请帮帮我。我的代码如下 xaml:- <TreeView Name="tvPersonal" Background="Transparent" ItemsSource="{Binding RootNodes}" SelectedItemChanged="tvPersonal_SelectedItemChanged"> <TreeView.ItemTemplate> <Hie

我有一个树视图,它绑定到具有父子关系的数据集。如何从树视图中选择树视图项?请帮帮我。我的代码如下

xaml:-

<TreeView Name="tvPersonal"  Background="Transparent"  ItemsSource="{Binding RootNodes}" SelectedItemChanged="tvPersonal_SelectedItemChanged">    
 <TreeView.ItemTemplate>
   <HierarchicalDataTemplate ItemsSource="{Binding rsParentChild}">
     <TextBlock Text="{Binding Name}" />
   </HierarchicalDataTemplate>
 </TreeView.ItemTemplate>
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;
        }

    }
试一试

或者浏览下面的链接。希望这有帮助


这适用于通过HierarchycalDataTemplate绑定数据源的树

处理TreeViewItem。已选定

<TreeView Name="mTreeView" TreeViewItem.Selected="TreeViewItem_OnItemSelected" />
您可以稍后检索

TreeViewItem tvi = mTreeView.Tag as TreeViewItem;

我发现的最好的解决方案包括一个简单的助手方法,可以用于几乎任何TreeView的事件(例如,SelectedItemChanged、MouseLeftButtonUp等)

我正在使用多层次数据模板,这是唯一适合我的方法。现在,我可以基于TreeView创建一个新控件,并可以在内部处理涉及所选项目的所有事件

public static TreeViewItem VisualUpwardSearch(DependencyObject source)
{
    while (source != null && !(source is TreeViewItem)) source = System.Windows.Media.VisualTreeHelper.GetParent(source);
    return source as TreeViewItem;
}

虽然biju的答案适用于平面层次结构,但我必须为HierarchycalDataTemplates寻找解决方案。这是对我有效的扩展方法:

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);

这不适用于通过
HierarchycalDataTemplate
绑定数据源的树。无法以这种方式获取孙子。如何在代码中编写此
TreeViewItem.Selected=“TreeViewItem\u OnItemSelected”
?我正试图根据一个新的控制树视图,并希望处理这个内部,而不是在每个地方我需要一个树视图。我似乎在任何地方都找不到可以通过TreeViewItem命名空间附加的事件……您可以在控件的构造函数中这样做:
AddHandler(TreeViewItem.SelectedEvent,new RoutedEventHandler(TreeViewItem_Selected));private void TreeViewItem_Selected(对象发送方,RoutedEventTargets e){{u selectedTreeViewItem=e.OriginalSource as TreeViewItem;}
看起来应该可以做到这一点!2012年我需要这个的时候你在哪里:)
TreeViewItem Item = TreeViewHelper.VisualUpwardSearch(e.OriginalSource as DependencyObject);
public static TreeViewItem VisualUpwardSearch(DependencyObject source)
{
    while (source != null && !(source is TreeViewItem)) source = System.Windows.Media.VisualTreeHelper.GetParent(source);
    return source as TreeViewItem;
}
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);