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