WPF: Как привязать к разным объектам? - PullRequest
0 голосов
/ 10 февраля 2010

У меня есть ListBox, содержащий CheckBoxes. Xaml выглядит так:

<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. Возможно ли это?

1 Ответ

0 голосов
/ 10 февраля 2010

Я нашел решение для этого. Я привязал 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>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...