0

我有两种方式将字符串依赖属性绑定到 TextBox 的文本。

绑定看起来像这样:

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

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

以下是事件的顺序:

  1. 用户输入如下所示的文本字符串:0299900650
  2. 用户按下回车。
  3. 在我的上键中,我将 MyValue 设置为 2999 并将焦点移至下一个字段。
  4. MyValue 的 setter 触发并使用 2999 执行 NotifiyPropertyChanged
  5. LostFocus 开火。
  6. MyValue 的设置器触发并使用 0299900650 执行 NotifiyPropertyChanged。

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

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

注意:我已经仔细检查了我的绑定。(除了他们在 UI 上工作,所以我想他们去 UI 是正确的。)

注二:当我说“用户输入一个字符串”时,它实际上是一个扫描的条形码。但是由于我使用的是键盘楔形,就好像它是输入的一样。(但是,设置值的全部意义在于,如果用户扫描与打字相反,我会做一些不同的事情。)

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

4

2 回答 2

2

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

  • 删除你的OnKeyUp偶数处理程序

和你做的一样。Enter单击时绑定机制会触发并将您的代码设置在属性后面。

如果您在 KeyUp 上进行操作,您的新值 2999 会被之后的绑定抑制。

要正确管理它,请使用Converter并摆脱OnKeyDown订阅。

于 2012-05-07T20:48:37.417 回答
0

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

于 2012-05-07T21:01:29.140 回答