双向绑定并不是真正的双向绑定
本文关键字:绑定 并不是 | 更新日期: 2023-09-27 18:33:30
我有一个双向绑定的字符串依赖项属性到文本框的文本。
绑定如下所示:
Text="{Binding MyValue, Mode=TwoWay}"
我有一些代码在 OnKeyUp(在附加属性中(中触发,用于设置MyValue
. 但是,它不是采用我的值并将其应用于 Text 属性,而是相反。
以下是事件的顺序:
- 用户输入如下所示的文本字符串:0299900650
- 用户按回车键。
- 在我的键向上,我将MyValue设置为2999,并将焦点移到下一个字段。
- MyValue 的设置器触发并执行 NotifiyProperty更改与 2999
- 失落的焦点开火了。
- MyValue 的设置器触发并执行 NotifiyPropertyChanged with 0299900650。
在我看来,我的价值并没有以某种方式回到"TextBox.Text"。 当我失去焦点时,TextBox 正在使用 Text 属性中的值更新字符串的值(未更改的值,因为我的更改没有恢复。
这里有我不知道的WPF魔法吗?
注意:我已经仔细检查了我的绑定。 (此外,它们从 UI 工作,所以我想它们使用 UI 是正确的。
注二:当我说"用户输入一个字符串"时,它实际上是一个扫描的条形码。 但是由于我使用的是键盘楔子,因此就好像它是输入的一样。 (但是,设置值的全部意义在于,如果用户扫描为键入,我正在执行不同操作。
更新:我发现这是由于另一个属性有副作用。 我能够解决问题。
您只需跳入绑定消息传递WPF
并发冲突。要证明这一点,请执行以下操作:
- 删除您的
OnKeyUp
甚至处理程序
并做你所做的同样的事情。单击绑定机制Enter
触发并将代码设置为属性后面。
如果你在KeyUp上做,你的新值2999被绑定后压。
要正确管理这一点,请使用转换器并摆脱OnKeyDown
甚至订阅。
我发现这是由于另一个属性具有副作用。我能够通过修复该副作用来解决问题。