0

ユーザーコントロールにバインドされたビューがあります。私のユーザーコントロールには、ビューからのコレクションにバインドされたデータグリッドがあります。そのデータグリッドの 1 つの列は DataGridComboBoxColumn であり、ビュー内の別のコレクションにバインドする必要があります。データグリッドのバインディングは次のようになります。

DataContext="{Binding .}" ItemsSource="{Binding VictimVillages}"

datacontext はビューでありVictimVillages、データグリッドに表示したいコレクションです。

コンボボックスに表示したいコレクションにアクセスしようとしました

ItemsSource="{Binding Path=Patterns,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Views:ViewPlanner}}}"

コレクションの名前は Patterns で、ビューのタイプは "ViewPlanner" で、Views名前空間にあります。

依存関係の図を作成しました。黄色の部分を理解するのに助けが必要です。 ここに画像の説明を入力

4

1 に答える 1

0

RelativeSource Binding を使用する場合、(ほとんどの場合) Binding Path でDataContext.YourPropertyを使用する必要があります。

DataGrid からのデータコンテキストにも Patterns コレクションがある場合は、これを行うことができます

ItemsSource="{Binding Path=DataContext.Patterns,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}}"

相対バインディングには「MarkerInterface」をよく使用します。つまり、ビューに追加できる空のインターフェイスを意味します。

public interface IDataContextMarker4PatternCollection {}

パターンコレクションプロパティがデータコンテキストにあるビュー/ユーザーコントロールにこのインターフェイスを追加します。

これで、RelativeSourceBinding を簡単に使用できるようになりました

 ItemsSource="{Binding Path=DataContext.Patterns,RelativeSource={RelativeSource AncestorType={x:Type local:IDataContextMarker4PatternCollection }}}"
于 2012-11-16T07:50:29.917 に答える