2011-06-09 6 views
2

Возможно ли иметь несколько ItemSources для одного элемента управления?WPF Multiple ItemSources?

Учитывая код ниже:

<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> 

Объект TextBlock в ComboBox DataTemplate требуются данные из другого имущества в пределах виртуальной машины, чем в ComboBox. Как это можно достичь?

Спасибо.

ответ

3

Вы можете использовать RelativeSource -FindAncestor, чтобы достичь визуального дерева и захватить другой DataContext.

Например (в предположении, команда является то, что вы хотите):

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

This также должен служить хорошим ресурсом.

Редактировать: Typo и ресурсы.

+0

Это не работает, я пробовал

+0

Теперь он работает. Это должно быть Path = DataContext.SelectedItem Спасибо –

+0

Рад слышать, что это помогло :) – Ragepotato

2

Если я правильно помню, DataTemplates запускаются в пределах их собственной области действия и не могут напрямую использовать ElementNames, определенные за пределами DataTemplate. Вы могли бы обойти его, используя StaticResource и ссылаясь на это непосредственно от TextBlock внутри шаблона.

Я не пробовал подход Ragepotatos выйти за пределы области DataTemplate, но хотел бы знать, если это сработает для вас тоже.