TwoWay绑定真的不是双向的吗?

时间:2012-05-07 20:43:08

标签: c# .net wpf binding

我对字符串依赖属性绑定到TextBox的Text。

绑定看起来像这样:

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

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

以下是事件序列:

  1. 用户输入一个如下所示的文本字符串:0299900650
  2. 用户按Enter键。
  3. 在我的on key up中,我将MyValue设置为2999并移动到焦点到下一个字段。
  4. MyValue的setter触发并执行带有2999的NotifiyPropertyChanged
  5. LostFocus开火。
  6. MyValue的setter触发并使用0299900650执行NotifiyPropertyChanged。
  7. 在我看来,我的价值并没有以某种方式回到“TextBox.Text”。当我松散焦点时,TextBox正在使用Text属性中的内容更新字符串的值(未更改的值,因为我的更改没有返回。)

    是否有一些我不知道的WPF魔法?

    注意:我已经仔细检查了我的绑定。 (除了它们在UI上工作,所以我认为它们是正确的用户界面。)

    注意II:当我说“用户输入一个字符串”时,它实际上是一个扫描的条形码。但由于我使用的是键盘楔形,因此就好像输入了它一样。(但是,设置值的重点是因为如果用户扫描为打字,我会做一些不同的事情。)

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

3 个答案:

答案 0 :(得分:2)

您只是在WPF绑定消息传递中跳入了可靠性冲突。 为了证明这一点,请执行以下操作:

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

并做同样的事情。在Enter点击绑定机制触发并设置您的代码隐藏属性。

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

要正确管理,请使用Converter并删除OnKeyDown甚至订阅。

答案 1 :(得分:1)

您是否尝试过阅读这篇文章? http://msdn.microsoft.com/en-us/library/ms754356.aspx

答案 2 :(得分:0)

我发现这是由于另一个有副作用的财产。我能够通过修复这种副作用来解决问题。