gpt4 book ai didi

c# - RadioButton 的绑定(bind)问题

转载 作者:行者123 更新时间:2023-11-30 12:50:17 26 4
gpt4 key购买 nike

我有一个看似简单的任务,这让我很头疼,希望得到一些帮助。

我想要完成的是将两个 bool 值绑定(bind)到两个 RadioButton 的 IsChecked 属性,共享相同的 GroupName(因此一次只检查一个) .

我面临的问题是,当 ContentPresenter 的内容即将更改(通过绑定(bind)到 ComboBox 的 SelectedItem)时,当前内容会收到对具有相同属性值的 Property-setter 的调用,但是来自即将成为新内容的 View 模型。 (!) 最终结果是,尽管没有单击绑定(bind)到相关属性的 RadioButton,但 View 模型发生了变化。

我输入了 together a sample app这表明了问题。要重现,请运行该应用并按照以下步骤操作:

  1. 在组合框中选择“一个”=> MyPropery 已选中,MyProperty2 未选中。
  2. 在组合框中选择“三”=> MyPropery 已选中,MyProperty2 未选中。
  3. 在仍然选择“三”的同时,单击 MyProperty2 => 选中 MyProperty2(也在调试输出窗口中指示)
  4. 在组合框中选择“一个”=> MyPropery 已选中,MyProperty2 未选中。 注意调试窗口如何显示对象“三”的 MyProperty2 在此处设置为 false
  5. 在组合框中选择“三”=> 现在两个单选按钮都未选中(由于 #4)。

如果在 #3 和 #4 之间,您首先在组合框中选择“两个”以使 ContentPresenter 显示另一个 View (通过 DataTemplate 选择),问题不会出现!?

有人可以解释为什么当 ContentPresenter 交换 View 时在第 4 步设置该属性,以及可以做些什么吗?

最佳答案

DataTemplates 被缓存,所以 OneThree使用完全相同的 UserControl .您可以通过添加 Loaded 来验证这一点事件传递给控件并在选项之间切换。

当您切换到 Two 时回到Three , WPf 将简单地从缓存中重新绘制项目,但是切换到 One回到Three , 它改变了 DataContext物体后面。我认为这是导致问题的原因,因为它似乎在删除 DataContext 之前清除了第二个 RadioButton IsChecked,因此最终结果是 Property2 被设置为 false。如果 One 都不会发生这种情况和 Three选择第二个单选按钮。

通常在这种情况下,我会让 VM 包含一个 ObservableCollection<T> Items和一个 int SelectedIndex .然后我将使用 ListBox 绘制 UI它已被覆盖以对项目使用 RadioButtons。这样一次只能选择一项,并且只有一个属性用于存储所选项目。

关于c# - RadioButton 的绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9516747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com