我目前陷入了以下情况的死胡同:
我有一个List<Category>
集合,每个集合都Category
包含一个Id
,Name
和一个List<string[]>
名为的属性Subcategory
(其中数组包含该子类别的Name
and Id
- 我不想创建另一个类)。
我有一个正确绑定到类别和子类别的方法TreeView
。HierarchicalDataTemplate
我在树节点旁边还有复选框,我绑定IsChecked
到MultiBinding
子/类别的 Id 和应检查的子/类别的整体列表。
<CheckBox.IsChecked>
<MultiBinding Converter="{StaticResource IsCategoryChecked}">
<Binding Path="Id"/>
<Binding Path="myDataSet.Tables[Categories]/cat_subcat"/>
</MultiBinding>
</CheckBox.IsChecked>
我使用的转换器只是检查我提供的子/类别的名称是否是列表的一部分(两者都是我绑定的值)。这很好用,总的来说我对结果很满意。
问题在于将检查/取消检查转换回来。当用户更改IsChecked
值时,我必须将子/类别的 ID 添加到所有已选中类别的列表中,或者从中删除该 ID。不幸的是,当我尝试为 实现ConvertBack()
方法时IMultiValueConverter
,我只能访问已更改的 ACTUAL 值(IsChecked 的真或假值),并且无法访问特定复选框绑定到的子/类别的 Id .
我尝试过但失败的解决方案:
在进行初始转换时保存子/类别名称不是一个选项,因为我对所有子/类别使用相同的转换器,因此我只会保存我尝试转换的最后一个子/类别。
使用
MouseUp
/KeyUp
事件是没有用的,因为(无论出于何种原因)它们无法被触发(一个错误?)。
我正在考虑忽略ConvertBack()
并使用Checked
/Unchecked
事件,但觉得这是一个相当“肮脏”的解决方案,因为我不妨完全忽略绑定!这是唯一的出路吗?我已经没有选择了,但仍然希望有一个“好的”解决方案,如果它在那里的话!