В настоящее время я зашел в тупик со следующей ситуацией:
У меня есть коллекция 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
, я должен либо добавить идентификатор подкатегории в список всех отмеченных категорий, либо удалить этот идентификатор из него. К сожалению, когда я попытался реализовать метод ConvertBack()
для IMultiValueConverter
, у меня есть доступ только к ФАКТИЧЕСКОМУ значению, которое изменилось (истинное или ложное значение IsChecked), и НЕТ доступа к Id подкатегории, которой является ЭТО КОНКРЕТНЫЙ ПРОВЕРКА привязан к.
РЕШЕНИЯ Я ПОПРОБОВАЛ, но безуспешно:
Сохранение имени подкатегории при первоначальном преобразовании не является вариантом, поскольку я использую один и тот же конвертер для ВСЕХ подкатегорий и, таким образом, я сохраню только последнюю подкатегорию, которую я пытался преобразовать.
Использование события _17 _ / _ 18_ бесполезно, потому что (по какой-либо причине) они не запускаются (ошибка?).
Я собираюсь игнорировать ConvertBack()
и использовать вместо этого события _20 _ / _ 21_, но чувствую, что это довольно "грязное" решение, потому что я мог бы полностью игнорировать привязки! Это единственный выход? У меня кончились варианты, но я все еще надеюсь на "хорошее" решение, если оно есть!