3

我已经构建了一个基于 WPF 的 Treeview

项目
-子项目

如果选择了子项,我还想显示项的属性。

<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 语句,但不太确定如何使用。

4

3 回答 3

7
 {Binding RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}, Path=Name, Mode=TwoWay}
于 2012-10-22T09:44:43.570 回答
6

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 属性返回您的数据对象而不是容器。

于 2012-10-24T04:35:25.863 回答
0

我查看了您的代码,尝试简单地绑定到Name. TreeViewItem由于以下行,您的数据上下文似乎应该已经设置为: <StackPanel Grid.Column="2" DataContext="{Binding ElementName=myTreeView, Path=SelectedItem}">。绑定可能正在进一步查找逻辑树,这RelativeResource就是绑定失败的原因。

于 2012-10-23T13:44:09.853 回答