我有一个看似简单的任务,这是让我头痛,并希望得到一些帮助。绑定问题与RadioButton
我想完成的是将两个布尔值绑定到两个RadioButton
的IsChecked属性,共享相同的GroupName
(因此一次只检查一个)。
我面临的问题是,当ContentPresenter的内容即将更改(通过绑定到ComboBox的SelectedItem)时,当前内容会接收对具有相同属性值的Property-setter的调用而是从即将成为新内容的视图模型。 (!)最终的结果是尽管没有点击与有问题的属性绑定的RadioButton,但视图模型发生了变化。
我已经把together a sample app显示出这个问题。要重现,运行应用程序,并按照下列步骤操作:在下拉列表
- 选择“一” => MyPropery检查,MyProperty2不是。
- 在combobox中选择“Three”=>选中MyPropery,MyProperty2不是。
- 虽然仍然选择“三”,单击MyProperty2 => MyProperty2选中(也显示在调试输出窗口中)
- 选择“One”在combobox => MyPropery被选中,MyProperty2不是。 请注意调试窗口如何显示对象“Three”的MyProperty2如何设置为false
- 在组合框中选择“Three”=>现在选中两个Radiobutton(由于#4)。
如果在#3和#4之间,首先在组合框中选择“Two”以使ContentPresenter显示另一个视图(通过DataTemplate选择),则问题不会出现!
有人可以解释为什么在ContentPresenter交换视图时为什么该属性设置为步骤#4,并且可以做些什么?
+1。 Rachels绝对正确:缓存DataTemplate生成的UIElements,并且UI中的CheckBox分组被激活到ViewModel中,从而搞乱了复选框的状态。 – SvenG 2012-03-01 15:35:57
所以基本上,GroupName和MVVM/DataTemplates不会混合。 :(我无法使用ListBox解决方案,因为我必须将RadioButton分开放置,我想我必须使用常规复选框,而不是在虚拟机中处理组合。感谢您的帮助。 – Per 2012-03-01 16:01:37