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

私はあなたのコードを見ました、単ににバインドしてみてくださいNameTreeViewItem次の行により、データコンテキストはすでにに設定されているようです<StackPanel Grid.Column="2" DataContext="{Binding ElementName=myTreeView, Path=SelectedItem}">RelativeResourceバインディングはおそらく論理ツリーをさらに検索しているため、バインディングが失敗しています。

于 2012-10-23T13:44:09.853 に答える