2011-06-09 16 views
2

1つのコントロールに複数のItemSourceを持たせることはできますか?以下のコードを考えるWPF複数のアイテムソース?

<ComboBox Margin="137,101,169,183" ItemsSource="{Binding collection}" SnapsToDevicePixels="True"    
<ComboBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
       <CheckBox Command="{Binding CheckCommand}" IsChecked="{Binding IsChecked}" Content="{Binding Name}"/> 
        <TextBlock Text="" /> 
       </StackPanel> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 

コンボボックスのDataTemplate内のTextBlockは、コンボボックスよりもVM内の他の施設からのデータを必要とします。これはどのように達成できますか?

ありがとうございました。

答えて

3

RelativeSource -FindAncestorを使用すると、ビジュアルツリーに到達して別のDataContextを取得できます。例えば

(コマンドを想定し、あなたが望むものである):

Command=”{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBox}}, Path=CheckCommand}” 

Thisも良い資源としての役割を果たす必要があります。

編集:誤植とリソース。

+0

これはうまくいかないようです。

+0

これで作業しましたか?それはパス= DataContext.SelectedItemする必要がありますありがとう –

+0

それは助けて嬉しい:) – Ragepotato

2

正しく覚えていれば、DataTemplatesは独自のスコープ内で実行され、DataTemplateの外で定義されたElementNamesを直接使用することはできません。しかし、StaticResourceを使用して、テンプレート内のTextBlockから直接それを参照することで、それを回避することができます。

私はDataTemplateの範囲外に行くRagepotatosのアプローチを試していませんが、それもあなたのために働くかどうかを知りたいです。

関連する問題