我用
构建了一个基于WPF的Treeview物品
-Subitem
如果选择了Subitem,我还想显示Item of Properties。
<StackPanel Grid.Column="2" DataContext="{Binding ElementName=myTreeView, Path=SelectedItem}">
<TextBox Text="{Binding Path=Name, Mode=TwoWay}" />
<TextBox Text="{Binding RelativeSource={???} Path=Name, Mode=TwoWay}" />
</StackPanel>
我想我需要使用RelativeSource语句,但不太确定如何这样做。
答案 0 :(得分:6)
{Binding RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}, Path=Name, Mode=TwoWay}
答案 1 :(得分:5)
JesseJames已经为您提供了使用RelativeSource的正确方法,但是您可以使用RelativeSource最好地绑定到TreeViewItem本身,它只是数据对象的容器,即ViewModel,这意味着您将无法使用访问您的数据对象属性(轻松)。
我认为在这种情况下,绑定到容器对象会破坏您正在使用的View-ViewModel方法。最好的办法是在ViewModel中创建一个Parent对象并绑定到该对象。因此,现在集合中的每个对象都引用了它的父级,现在可以直接绑定它。
<StackPanel Grid.Column="2" DataContext="{Binding ElementName=myTreeView, Path=SelectedItem}">
<TextBox Text="{Binding Path=Name, Mode=TwoWay}" />
<TextBox Text="{Binding Parent.Name}" />
</StackPanel>
另请注意,SelectedItem属性返回数据对象而不是容器。
答案 2 :(得分:0)
我看了你的代码,试着简单地绑定到Name
。由于以下行,您的数据上下文似乎已经设置为TreeViewItem
:<StackPanel Grid.Column="2" DataContext="{Binding ElementName=myTreeView, Path=SelectedItem}">
。 RelativeResource
绑定可能会进一步查看逻辑树,这就是绑定失败的原因。