从TreeViewItem获取Treeview父级

时间:2014-04-02 11:29:34

标签: c# wpf

我想知道是否有意义来获得TreeViewItem程序的treview父级或者WPF中的转向示例。 目标是使用TreeView的DataContext以便从ViewModel执行命令。 任何帮助将不胜感激。

这里是xaml代码。 AddDisplayProperty是树视图的数据上下文的一部分。 我的另一个问题是如何从DataTemplate的TextBlock中找到TreeViewItem。

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

2 个答案:

答案 0 :(得分:1)

我会查看this link。我认为它解释了如何从代码背后做到这一点。

可以使用parent.DataContext

访问示例中的datacontext

答案 1 :(得分:1)

我已经在某个时间点使用过此代码,您只需要调用ParentofType(treeviewItem),它将为您提供它找到链的第一个Treeview或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;
}