我目前停留在有以下情况死胡同:WPF绑定转换器
我有一个List<Category>
集合,每个Category
包含Id
,Name
和List<string[]>
属性调用Subcategory
(其中数组包含Name
和Id
那个subcagtegory - 我不想创建另一个班级)。
我有一个TreeView
与HierarchicalDataTemplate
正确绑定到类别和子类别。我也在树节点旁边有复选框,我将IsChecked
绑定到子/类别的Id的MultiBinding
以及应该检查的子/类别的总体列表。
<CheckBox.IsChecked>
<MultiBinding Converter="{StaticResource IsCategoryChecked}">
<Binding Path="Id"/>
<Binding Path="myDataSet.Tables[Categories]/cat_subcat"/>
</MultiBinding>
</CheckBox.IsChecked>
我使用的转换器只是检查我提供的子/类别的名称是否是列表的一部分(两者都是我绑定的值)。这工作得很好,总体而言,我对结果很满意。
问题与转换检查/取消选中回来。当用户更改IsChecked
值时,我必须将子/类别的标识添加到所有检查过的类别列表中,或者从中删除该标识。不幸的是,当我试图实现方法IMultiValueConverter
时,我只能访问更改的实际值(IsChecked的真或假值),并且无法访问该特定复选框的子/类别的Id势必。
SOLUTIONS我做过尝试,但惨遭失败:
保存子/类别名称,当我做最初的转换是不是一种选择,因为我使用的是相同的转换为所有子/类别因此我只会保存我试图转换的最后一个子/类别。
使用
MouseUp
/KeyUp
事件是无用的,因为(无论什么原因)它们无法被触发(一个bug?)。
我考虑忽略ConvertBack()
和使用Checked
/Unchecked
事件,而不是,但觉得这是一个相当“脏”的解决方案,因为我还不如完全忽略绑定!这是唯一的方法吗?我已经没有选择,但仍希望有一个“好”的解决方案,如果它在外面!
你的第二个建议看起来很有趣。但我有一个问题。我需要一个双向绑定,这意味着它必须确定是否基于绑定数据进行检查(现在运行良好),并且还必须在用户检查时编辑数据。我将如何处理目标 - >来源变更? – Alexandra 2009-04-14 14:40:47