Использование Listbox в ItemTemplate - PullRequest
1 голос
/ 19 ноября 2008

У меня есть listbox контроль. Я создал ItemTemplate для этого listbox, в котором есть два элемента управления.

  1. Кнопка переключения
  2. Управление списком

Структура

<Listbox x:Key="Listbox1" ItemTemplate={StaticResource ListBox1ParentItemTemplate}>

</Listbox>

<Datatemplate x:Key="ListBox1ParentItemTemplate">
    <ToggleButton></ToggleButton>
    <Listbox x:Key="Listbox1" ItemTemplate={StaticResource ListBox2ParentItemTemplate}>
    </Listbox>
</Datatemplate>

<Datatemplate x:Key="ListBox2ParentItemTemplate">
    <TextBlock Text="{Binding Mode=Default, XPath=@Description}" TextWrapping="Wrap"/>
    <CheckBox DockPanel.Dock="Right" />
</Datatemplate>

В основном Listbox2 - это CheckedListbox. Мое требование заключается в следующем 1. Привязать ToggleButton к Listbox1 SelectedItem, т.е. если в Listbox1 выбрано 4 элемента, то кнопка 4-го элемента должна проверяться автоматически, а другая кнопка не должна проверяться. 2. Если установлен флажок ToggleButton, то все флажки в Listbox2 должны быть автоматически установлены. Также, если один из флажков в Listbox2 не установлен, то ToogleButton должен быть автоматически снят. (Эта функциональность аналогична TreeNode и функциональности дочернего узла. Если установлен родительский узел, тогда выбираются все дочерние узлы, и если один из дочерних узлов не выбран, родительский узел должен быть не выбран).

1 Ответ

1 голос
/ 19 ноября 2008

Пример кода поможет нам лучше понять вашу проблему.

Похоже, вы пытаетесь добавить некоторую бизнес-логику в пользовательский интерфейс, попробуйте создать правильный ViewModel, а затем привязать его к элементу управления, чтобы вычисления можно было выполнять на стороне ViewModel, и на основе вашей логики вы можете обновить пользовательский интерфейс - (INotifyPropertyChanged)

ViewModel будет иметь свойство Bool (Bind to ToggleButton), которое изменяется в соответствии с остальными 3 значениями bool (которые привязаны к 4 флажкам). При любом вызове сеттера внутри ViewModel необходимо пересчитать (это будет логическая операция И) все свойства снова. Поскольку режим привязки CheckBox по умолчанию установлен на TwoWay, его будет очень легко реализовать.

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