我想知道是否有意义来获得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>
答案 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;
}