绑定活跃但不呈现数据

Binding active but not presenting data

我设计了一个这样的文本框。

<TextBox x:Name="OrderId" 
         Text="{Binding CurrentOrder}"/>

在视图模型中我可以看到断点命中了 setter 和 getter 并且返回的值 应该的值。

public Order CurrentOrder
{
  get { return _currentOrder; }
  set
  {
    _currentOrder = value;
    OnPropertyChanged();
  }
}

但是,框中没有显示任何内容。我自己也手动在框中键入一个数字,然后使绑定将值从源更新回控件。它把盒子擦干了。就像 null 写在那里......当然我已经检查过订单中没有 null 值。

  1. 我做错了什么?
  2. 如何解决?

当然,我已经测试了不同的单向、双向等模式。徒劳无功。是否也需要将通知方法调用放在 Order class 中属性的 setter 上?即使它不是为双向模式设计的?

我将从如何解决问题开始:

  1. 首先,首先检查你的输出window。是否有任何 System.Data 异常表明绑定有错误?

  2. 在类似 Snoop 的工具中检查元素。它通常会显示任何绑定错误。

  3. 做一些你已经做过的事情,确保setter被调用,然后getter来证明绑定正在评估。

现在说说可能出了什么问题:

  1. 据我所知,您正在将 Text 直接绑定到一个对象。除非该对象覆盖 ToString(),否则通常不会像您预期的那样工作。

  2. 从上面的内容可以看出,手动输入字符串 非常 对运行时造成混淆,因为它不知道如何将字符串转换为目的。除非您使用转换器

  3. ,否则您看到的行为是有意义的
  4. 当然,如果您使用转换器,则需要检查 那个 代码中的 breakpoints/data 以确保其按预期工作。

  5. 对于您的编辑,如果您绑定到 class 的 属性,并且希望代码更改为 属性 传播到 UI,是的,它需要提高 PropertyChagned 而 class 需要实施 INotifyPropertyChanged.