c# – 与RadioButton的绑定问题
我有一个看似简单的任务,这让我很头疼,并会感激一些帮助.
我想要完成的是将两个布尔值绑定到两个RadioButtons的IsChecked属性,共享相同的GroupName(因此一次只检查一个). 我面临的问题是,当ContentPresenter的内容即将更改时(通过绑定到ComboBox的SelectedItem),当前内容接收对Property-setter的调用,该属性具有相同属性的值,但是从视图中即将成为新内容的模型. (!)最终结果是视图模型发生了变化,尽管没有点击绑定到相关属性的RadioButton. 我把together a sample app显示出来了.要重现,请运行该应用并按照以下步骤操作: >在组合框中选择“一个”=>检查MyPropery,MyProperty2不是. 如果在#3和#4之间,首先在组合框中选择“Two”以使ContentPresenter显示另一个视图(通过DataTemplate选择),问题不会出现!? 有人可以解释为什么在ContentPresenter交换视图时,在第4步设置属性,以及可以采取哪些措施? 解决方法
DataTemplates被缓存,因此One和Three都使用完全相同的UserControl.您可以通过向控件添加Loaded事件并在选项之间切换来验证这一点.
当你切换到Two并返回到Three时,WPf将简单地从缓存中重新绘制项目,但是切换到One并返回到Three,它会更改对象后面的DataContext.我认为这是导致问题的原因,因为它似乎在删除DataContext之前清除了第二个RadioButton IsChecked,因此最终结果是Property2被设置为false.如果One和Three都选择了第二个单选按钮,则不会发生这种情况. 通常在这种情况下,我将使VM包含ObservableCollection< T> Items和一个int SelectedIndex.然后我将使用ListBox绘制UI,该ListBox已被覆盖以使用RadioButtons作为项目.这样,一次只能选择一个项目,并且只有一个属性用于存储所选项目. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |