В настоящее время я зашел в тупик со следующей ситуацией:
У меня есть коллекция 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_, но чувствую, что это довольно "грязное" решение, потому что я мог бы полностью игнорировать привязки! Это единственный выход? У меня кончились варианты, но я все еще надеюсь на "хорошее" решение, если оно есть!