2010-02-10 4 views
0

У меня есть ListBox, содержащий CheckBoxes. Xaml выглядит следующим образом:WPF: Как привязать к различным объектам?

<ListBox x:Name="lbContactTypes"> 
    <ListBox.ItemTemplate> 
     <HierarchicalDataTemplate> 
      <CheckBox Content="{Binding Path=Description}" IsChecked="{Binding Path=ContactTypes, Converter={x:Static Classes:ListContainsConverter.Instance}, ConverterParameter=1}" /> 
     </HierarchicalDataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Я связываю ItemsSource в моем коде, как это:

lbContactTypes.ItemsSource = GetLeadContactTypes(); 

До сих пор так хорошо. Три флажка создаются с правильным контентом. Теперь я хотел бы установить свойство IsChecked для другого объекта, который содержит текущие данные для объекта, с которым я работаю.

Чтобы немного уточнить, я установил DataContext окна для объекта Customer, который среди других содержит ObservableCollection of ContactTypes, и я хотел бы привязать эти свойства ContactTypes к IsChecked, чтобы флажки были проверены. Я проверяю, содержит ли ObservableCollection искомое целое число, вызывая конвертер ListContainsConverter, который возвращает bool. Это возможно?

ответ

0

Я нашел решение этого. Я обязан IsChecked к Window.DataContext, так что XAML выглядит следующим образом:

<ListBox x:Name="lbContactTypes"> 
    <ListBox.ItemTemplate> 
     <HierarchicalDataTemplate> 
      <CheckBox Content="{Binding Path=Description}" IsChecked="{Binding Path=DataContext.ContactTypes, RelativeSource={RelativeSource AncestorType={x:Type Window}}, Converter={x:Static Classes:ListContainsConverter.Instance}, ConverterParameter=1}" /> 
     </HierarchicalDataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

я все еще был бы интересно узнать, есть ли лучшее решение существует. Дай мне знать.

Смежные вопросы