我设计了一个这样的文本框。
<TextBox x:Name="OrderId"
Text="{Binding CurrentOrder}"/>
在视图模型中,我可以看到断点点击了setter和getter,返回的值 值为。
public Order CurrentOrder
{
get { return _currentOrder; }
set
{
_currentOrder = value;
OnPropertyChanged();
}
}
但是,框中没有任何内容。我也手动输入框中的数字,然后导致绑定将源中的值更新回控件。它将盒子擦干净。就像 null 写在那里一样......当然我已经检查了订单中没有 null 值。
当然,我已经测试了不同的单向,双向等模式。徒劳无功。是否有必要将通知方法调用放在 Order 类中的属性的setter上?即使它不是用于双向模式吗?
答案 0 :(得分:1)
我将从如何排除故障开始:
首先,在其他任何事情之前,检查您的输出窗口。是否有任何System.Data
异常表明绑定有错误?
检查Snoop等工具中的元素。它通常会显示任何绑定错误。
做一些你已经完成的事情,确保调用setter,然后 getter来证明绑定正在评估。
现在可能出现的问题:
从我所看到的,您将Text
直接绑定到一个对象。除非该对象覆盖ToString()
,否则通常无法按预期工作。
从上面开始,手动输入字符串将非常混淆运行时,因为它不知道如何将字符串转换为对象。除非您使用转换器
当然,如果您使用转换器,则需要检查 代码中的断点/数据,以确保其按预期工作。
要编辑,如果您绑定到类的属性,并希望对该属性进行代码更改以传播到UI,是的,它需要引发{{1}并且该类需要实现PropertyChagned
。