В данный момент я зашел в тупик со следующей ситуацией:
У меня есть коллекция List<Category>
, каждая из которых Category
содержит свойства Id
, Name
и List<string[]>
с именем Subcategory
(где массив содержит Name
и Id
этой подкатегории - Мне не хотелось создавать другой класс).
У меня есть TreeView
с HierarchicalDataTemplate
, правильно привязанным к категориям и подкатегориям. У меня также есть флажки рядом с узлом дерева, и я связываю IsChecked
с MultiBinding
идентификатора подкатегории / категории и общим списком подкатегорий / категорий, которые должны быть отмечены.
<CheckBox.IsChecked>
<MultiBinding Converter="{StaticResource IsCategoryChecked}">
<Binding Path="Id"/>
<Binding Path="myDataSet.Tables[Categories]/cat_subcat"/>
</MultiBinding>
</CheckBox.IsChecked>
Конвертер, который я использую, просто проверяет, является ли имя подкатегории / категории, которое я предоставляю, частью списка (оба являются значениями, к которым я привязан). Это отлично работает, и в целом я вполне доволен результатом.
Проблема заключается в преобразовании чека / снятия отметки обратно. Когда пользователь изменяет значение IsChecked
, я должен либо добавить Id подкатегории / категории в список всех отмеченных категорий, либо удалить этот Id из него. К сожалению, когда я попытался реализовать метод ConvertBack()
для IMultiValueConverter
, у меня есть доступ только к измененному АКТУАЛЬНОМУ значению (истинное или ложное значение IsChecked) и НЕТ доступа к идентификатору подкатегории / категории, которая ЭТО КОНКРЕТНЫЙ КОНТРОЛЬНЫЙ ЯЩИК связан с
РЕШЕНИЯ, КОТОРЫЕ Я ПРОБОВАЛ, но с треском провалился:
Сохранение имени подкатегории / категории при первоначальном преобразовании не является вариантом, поскольку я использую один и тот же конвертер для ВСЕХ подкатегорий и, следовательно, я сохраню только последнюю подкатегорию / категорию I ' мы пытались конвертировать.
Использование события MouseUp
/ KeyUp
бесполезно, потому что (по какой-либо причине) они не запускаются (ошибка?).
Я обдумываю игнорировать ConvertBack()
и использовать вместо этого Checked
/ Unchecked
события, но чувствую, что это довольно "грязное" решение, потому что я мог бы просто проигнорировать привязки! Это единственный путь? У меня закончились варианты, но я все еще надеюсь на «хорошее» решение, если оно есть!