绑定活跃但不呈现数据
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 值。
- 我做错了什么?
- 如何解决?
当然,我已经测试了不同的单向、双向等模式。徒劳无功。是否也需要将通知方法调用放在 Order class 中属性的 setter 上?即使它不是为双向模式设计的?
我将从如何解决问题开始:
首先,首先检查你的输出window。是否有任何 System.Data
异常表明绑定有错误?
在类似 Snoop 的工具中检查元素。它通常会显示任何绑定错误。
做一些你已经做过的事情,确保setter被调用,然后getter来证明绑定正在评估。
现在说说可能出了什么问题:
据我所知,您正在将 Text
直接绑定到一个对象。除非该对象覆盖 ToString()
,否则通常不会像您预期的那样工作。
从上面的内容可以看出,手动输入字符串 非常 对运行时造成混淆,因为它不知道如何将字符串转换为目的。除非您使用转换器
,否则您看到的行为是有意义的
当然,如果您使用转换器,则需要检查 那个 代码中的 breakpoints/data 以确保其按预期工作。
对于您的编辑,如果您绑定到 class 的 属性,并且希望代码更改为 属性 传播到 UI,是的,它需要提高 PropertyChagned
而 class 需要实施 INotifyPropertyChanged
.
我设计了一个这样的文本框。
<TextBox x:Name="OrderId"
Text="{Binding CurrentOrder}"/>
在视图模型中我可以看到断点命中了 setter 和 getter 并且返回的值 是 应该的值。
public Order CurrentOrder
{
get { return _currentOrder; }
set
{
_currentOrder = value;
OnPropertyChanged();
}
}
但是,框中没有显示任何内容。我自己也手动在框中键入一个数字,然后使绑定将值从源更新回控件。它把盒子擦干了。就像 null 写在那里......当然我已经检查过订单中没有 null 值。
- 我做错了什么?
- 如何解决?
当然,我已经测试了不同的单向、双向等模式。徒劳无功。是否也需要将通知方法调用放在 Order class 中属性的 setter 上?即使它不是为双向模式设计的?
我将从如何解决问题开始:
首先,首先检查你的输出window。是否有任何
System.Data
异常表明绑定有错误?在类似 Snoop 的工具中检查元素。它通常会显示任何绑定错误。
做一些你已经做过的事情,确保setter被调用,然后getter来证明绑定正在评估。
现在说说可能出了什么问题:
据我所知,您正在将
Text
直接绑定到一个对象。除非该对象覆盖ToString()
,否则通常不会像您预期的那样工作。从上面的内容可以看出,手动输入字符串 非常 对运行时造成混淆,因为它不知道如何将字符串转换为目的。除非您使用转换器
,否则您看到的行为是有意义的
当然,如果您使用转换器,则需要检查 那个 代码中的 breakpoints/data 以确保其按预期工作。
对于您的编辑,如果您绑定到 class 的 属性,并且希望代码更改为 属性 传播到 UI,是的,它需要提高
PropertyChagned
而 class 需要实施INotifyPropertyChanged
.