从 TreeViewItem 获取树视图父项
本文关键字:视图 TreeViewItem 获取 | 更新日期: 2023-09-27 17:56:03
我会知道是否有办法以编程方式获取 TreeViewItem 的 treview 父级或 WPF 中的周转示例。目标是拥有 TreeView 的 DataContext,以便从 ViewModel 执行命令。任何帮助将不胜感激。
这里是 xaml 代码。AddDisplayProperty 是树视图的数据上下文的一部分。我的另一个问题是如何从数据模板的文本块中找到树视图项。
<TreeView ItemsSource="{Binding DisplayProperties, Mode=OneWay}" MinHeight="20" AllowDrop="True">
<i:Interaction.Behaviors>
<local:FrameworkElementCommandDropBehavior DropCommand="{Binding AddDisplayPropertyCommand}" DropType="{x:Type local:SearchProperty}"/>
</i:Interaction.Behaviors>
<TreeView.Resources>
<DataTemplate DataType="{x:Type local:SearchProperty}">
<TextBlock Margin="5.0" Text="{Binding Path=LongDescription, Mode=OneWay}" AllowDrop="True">
<i:Interaction.Behaviors>
<local:FrameworkElementCommandDropBehavior DropCommand="[Binding AddDisplayPropertyCommand}" DropType="{x:Type local:SearchProperty}" DropParameters="{Binding}"/>
</i:Interaction.Behaviors>
</TextBlock>
</DataTemplate>
</TreeView.Resources>
</TreeView>
我在某个时间点使用了这段代码,你只需要调用ParentofType(treeviewItem),它就会给你第一个树视图,它在链上找到或null。
public T ParentOfType<T>(DependencyObject element) where T : DependencyObject
{
if (element == null)
return default (T);
else
return Enumerable.FirstOrDefault<T>(Enumerable.OfType<T>((IEnumerable) GetParents(element)));
}
public IEnumerable<DependencyObject> GetParents( DependencyObject element)
{
if (element == null)
throw new ArgumentNullException("element");
while ((element = GetParent(element)) != null)
yield return element;
}
private DependencyObject GetParent(DependencyObject element)
{
DependencyObject parent = VisualTreeHelper.GetParent(element);
if (parent == null)
{
FrameworkElement frameworkElement = element as FrameworkElement;
if (frameworkElement != null)
parent = frameworkElement.Parent;
}
return parent;
}
我会看看这个链接。我认为它解释了如何做到这一点,从代码后面。
可以使用父级访问示例中的数据上下文。数据上下文