2009-03-10 9 views
8

私はデータバインディングを使用して設定された項目のグリッドを持っています。 グリッドには、特定のセルに対してDataTemplateがあります。私は自分のデータ・テンプレートをサポートするために追加のバインディングにアクセスできるように、ルート要素(グリッドをホストしているもの)のDataContextにアクセスする必要があります。WPFでDataTemplateのルートDataContextにアクセスするにはどうすればよいですか?

だからあなたがいる:

Window 
    Window.DataContext = TheDataSourceWithItemsAndSupports 
    DataGrid.ItemsSource = {Binding Items} 
     DataTemplate 
      ListBox.ItemsSource = {Binding Supports} 

私はTheDataSourceWithItemsAndSupports{Binding Supports}をしたいが、私はそれを行う方法が表示されません。私は{Binding}を指定しようとしましたが、それは常にnullを返します。私もRelativeSource FindAncestorを使ってみましたが、それはnullでもあります。

手がかりはありますか?

答えて

14

多分それはあなたが記述方法を動作するはず

Window Name="TheWindow" 
... 
ListBox.ItemsSource = {Binding DataContext.Supports, ElementName=TheWindow} 
+0

バインディングパスはDataContext.Supportsだと思いますが、これも私の考えです。 –

+0

あなたは正しい、改正されました。 – user76035

+0

これはうまくいきましたが、もう少しコーディングする必要がありました(上記のシナリオは、状況を正確に表現したものではありません)。 – Inferis

0

を試してみてください。あなたのDataTemplateを見るのはItemTemplateだけではありません。また、出力ウィンドウを見て、バインディングが失敗する場所を確認する必要があります。

0

私のソリューションは、このフィールドに

get 
{ 
    return this; 
} 

を実装し、それに結合することによって、全体のDataContextクラスを公開しました。

関連する問題