属性 在更改用户控件依赖项时重置属性

Property resets when changing Usercontrols DependencyProperty

我构建了一个“Widgets”的“Manager”,其中我有一个 ListView/GridView 和 widgets。

ListView 将 SelectedItem 绑定到(Manager)ViewModel 上的 SelectedWidget 属性。

SelectedWidget 通过名为“Widget”的 DependencyProperty 绑定到名为 WidgetConfig 的用户控件,您可以在其中修改 selected Widget 的属性。

在 WidgetConfig 中,有 2 个单选按钮:

<RadioButton GroupName="Lead" IsChecked="{Binding Widget.prop1, Mode=TwoWay, ElementName=root}" />
<RadioButton GroupName="Lead" IsChecked="{Binding Widget.prop2, Mode=TwoWay, ElementName=root}" />

当我 select 'prop2' 时,INPC 信号被正确发送,模型也相应更新。如果然后我点击 'prop1',INPC 信号被发送 + 我从 prop2 单选按钮得到一个额外的信号。

问题来了: if i select prop2 然后 select ListView 中的另一个 Widget。我收到一个 INPC 信号,prop2 变回 false!

怎么回事?

一些信息:

编辑:

我在这里创建了一个可重现的示例:https://github.com/Montago/INCP-DP-BindingExample

您拥有的是双向绑定链,它们正在改变您模型上的值:

ListControl.SelectedItem(DP) 和 ViewModel.SelectedModel(INPC) 之间的双向绑定。

ViewModel.SelectedModel(INPC) 和 ModelControl.ActiveModel(DP) 之间的双向绑定。

ModelControl.ActiveModel(DP) 与 Model.Prop1/Model.Prop2/Model.Name(INPC).

双向绑定

当您 select First, Second 然后再 First, Second 的 prop2 被 WPF 数据绑定覆盖为 false。

解决此问题的一种方法是删除覆盖 prop2 的双向绑定,即在 RadioButton 绑定上指定 Mode=OneWay。

我对正在发生的事情的猜测:RadioButton 的逻辑和双向绑定。当列表框中的 selected 并且您将 selection 更改为 First 时,WPF 的数据绑定将 Prop1 单选按钮设置为 selected(因为 First.prop1 == true)。此时,第二个单选按钮仍处于 selected 状态,因此为了遵守分组原则,需要取消 selected。但是,Prop2 无线电上仍然存在双向绑定,因此 Second.prop2 设置为 false。