从 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>

从 TreeViewItem 获取树视图父项

我在某个时间点使用了这段代码,你只需要调用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;
}

我会看看这个链接。我认为它解释了如何做到这一点,从代码后面。

可以使用父级访问示例中的数据上下文。数据上下文