双向绑定并不是真正的双向绑定

本文关键字:绑定 并不是 | 更新日期: 2023-09-27 18:33:30

我有一个双向绑定的字符串依赖项属性到文本框的文本。

绑定如下所示:

Text="{Binding MyValue, Mode=TwoWay}"

我有一些代码在 OnKeyUp(在附加属性中(中触发,用于设置MyValue . 但是,它不是采用我的值并将其应用于 Text 属性,而是相反。

以下是事件的顺序:

  1. 用户输入如下所示的文本字符串:0299900650
  2. 用户按回车键。
  3. 在我的键向上,我将MyValue设置为2999,并将焦点移到下一个字段。
  4. MyValue 的设置器触发并执行 NotifiyProperty更改与 2999
  5. 失落的焦点开火了。
  6. MyValue 的设置器触发并执行 NotifiyPropertyChanged with 0299900650。

在我看来,我的价值并没有以某种方式回到"TextBox.Text"。 当我失去焦点时,TextBox 正在使用 Text 属性中的值更新字符串的值(未更改的值,因为我的更改没有恢复。

这里有我不知道的WPF魔法吗?

注意:我已经仔细检查了我的绑定。 (此外,它们从 UI 工作,所以我想它们使用 UI 是正确的。

注二:当我说"用户输入一个字符串"时,它实际上是一个扫描的条形码。 但是由于我使用的是键盘楔子,因此就好像它是输入的一样。 (但是,设置值的全部意义在于,如果用户扫描为键入,我正在执行不同操作。

更新:我发现这是由于另一个属性有副作用。 我能够解决问题。

双向绑定并不是真正的双向绑定

您只需跳入绑定消息传递WPF并发冲突。要证明这一点,请执行以下操作:

  • 删除您的OnKeyUp甚至处理程序

并做你所做的同样的事情。单击绑定机制Enter触发并将代码设置为属性后面。

如果你在KeyUp上做,你的新值2999被绑定后压。

要正确管理这一点,请使用转换器并摆脱OnKeyDown甚至订阅。

我发现这是由于另一个属性具有副作用。我能够通过修复该副作用来解决问题。