加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 与RadioButton的绑定问题

发布时间:2020-12-15 21:31:17 所属栏目:百科 来源:网络整理
导读:我有一个看似简单的任务,这让我很头疼,并会感激一些帮助. 我想要完成的是将两个布尔值绑定到两个RadioButtons的IsChecked属性,共享相同的GroupName(因此一次只检查一个). 我面临的问题是,当ContentPresenter的内容即将更改时(通过绑定到ComboBox的SelectedIt
我有一个看似简单的任务,这让我很头疼,并会感激一些帮助.

我想要完成的是将两个布尔值绑定到两个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步设置属性,以及可以采取哪些措施?

解决方法

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作为项目.这样,一次只能选择一个项目,并且只有一个属性用于存储所选项目.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读