WPF: можно ли привязать метод выбранного объекта в другом элементе управления? - PullRequest
0 голосов
/ 08 марта 2009

У меня есть два списка WPF. Один из них представляет собой список списков (на самом деле это список ObservableCollection), а другой - список всех известных экземпляров «Thingy».

Вот таблица данных, которую я использую для класса "штуковин".

<DataTemplate DataType="{x:Type Model:Thingy}">
    <StackPanel Orientation="Horizontal">
        <CheckBox x:Name="ThingyInListCheckBox" Click="ThingyInList_Click"></CheckBox>
        <TextBlock Text="{Binding Path=ThingyName}"></TextBlock>
     </StackPanel> 

Вот XAML для списков:

<ListBox 
   Name="ListOfGroups"
   SelectionMode="Single">           
</ListBox>
<ListBox 
   Name="ListOfThingys"
   SelectionMode="Single">
</ListBox>

У меня есть привязка данных для списков в коде, потому что я слишком устал, чтобы понять, как это сделать в XAML:

ListOfGroups.ItemsSource = InMemoryCache.ThingyGroups;
ListOfThingys.ItemsSource = InMemoryCache.Thingys;

Мне нужен флажок «ThingyInListCheckBox», если объект «вещь» находится в списке, который является выбранным элементом в списке «Список объектов». Поэтому в основном мне нужно привязать его к методу «Contains» объекта «ListOfGroups» .SelectedItem и передать ему «ListOfThingys» .SelectedItem в качестве параметра.

Я испытываю желание сделать все это в коде, но я пытаюсь лучше понять привязку данных XAML, потому что я ненавижу себя и хочу, чтобы я страдал.

Возможно ли это вообще, или я попал в неизбежную "стену привязки данных", которая существует в любой другой системе привязки данных в истории разработки программного обеспечения?

1 Ответ

0 голосов
/ 08 марта 2009

Возможно, на самом деле самое сложное в том, что есть много способов сделать это, и вы должны выбрать один. Ни один из них не является простым дополнением к вашему текущему коду. Однако есть один способ получить больше, чем просто решить свою проблему. На самом деле, это скорее шаблон, называемый MVVM (некоторые могут поспорить о наименовании).

Вот небольшое объяснение вашего примера. Предположим, ThingyGroup имеет свойство IsSelected , которое связано со свойством IsSelected содержащего ListBoxItem . Снова предположим, что Thingy также имеет свойство Group . Затем вы можете использовать Group.IsSelected в качестве пути для привязки. Обратите внимание, что все еще есть небольшая проблема, что IsSelected является bool, а IsChecked является nullable bool.

Поиск по MVVM должен дать вам конкретные образцы.

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