我想要完成的是将两个布尔值绑定到两个RadioButtons的IsChecked属性,共享相同的GroupName(因此一次只检查一个).
我面临的问题是,当ContentPresenter的内容即将更改时(通过绑定到ComboBox的SelectedItem),当前内容接收对Property-setter的调用,该属性具有相同属性的值,但是从视图中即将成为新内容的模型. (!)最终结果是视图模型发生了变化,尽管没有点击绑定到相关属性的RadioButton.
我把together a sample app显示出来了.要重现,请运行该应用并按照以下步骤操作:
>在组合框中选择“一个”=>检查MyPropery,MyProperty2不是.
>在组合框中选择“三个”=>检查MyPropery,MyProperty2不是.
>选择“三个”时,单击MyProperty2 =>检查MyProperty2(也在调试输出窗口中显示)
>在组合框中选择“一个”=>检查MyPropery,MyProperty2不是.请注意调试窗口如何在此处显示对象“Three”的MyProperty2如何设置为false
>在组合框中选择“三个”=>现在都没有检查Radiobuttons(由于#4).
如果在#3和#4之间,首先在组合框中选择“Two”以使ContentPresenter显示另一个视图(通过DataTemplate选择),问题不会出现!?
有人可以解释为什么在ContentPresenter交换视图时,在第4步设置属性,以及可以采取哪些措施?
解决方法
当你切换到Two并返回到Three时,WPf将简单地从缓存中重新绘制项目,但是切换到One并返回到Three,它会更改对象后面的DataContext.我认为这是导致问题的原因,因为它似乎在删除DataContext之前清除了第二个RadioButton IsChecked,因此最终结果是Property2被设置为false.如果One和Three都选择了第二个单选按钮,则不会发生这种情况.
通常在这种情况下,我将使VM包含ObservableCollection< T> Items和一个int Selectedindex.然后我将使用ListBox绘制UI,该ListBox已被覆盖以使用RadioButtons作为项目.这样,一次只能选择一个项目,并且只有一个属性用于存储所选项目.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。