当数据源对象的属性不会在其setter中引发PropertyChanged
事件时,双向数据绑定如何在Silverlight中工作?
例如,在代码示例中,我看到数据绑定到System.Windows.Point
结构的实例,该结构未实现INotifyPropertyChanged
且可变。如果有人直接在Point中设置X
和Y
属性,而不是用新实例替换对象,会发生什么(或应该发生?)
答案 0 :(得分:3)
用户界面不会更新。这里没有魔力。没有抛出任何事件意味着UI将错过更新。
答案 1 :(得分:2)
Point是一个结构,所以即使Point是可变的,你从属性调用获得的Point与存储在底层字段中的Point不同;这是一份副本。因此,如果您改变副本,则基础字段保持不变。不需要属性更改通知,因为该属性的值实际上没有更改。如果类实际上直接在其私有字段中突变了Point,那么只会出现问题。这个类实现者要么不执行此操作,要么在结构发生变异时手动调用PropertyChanged通知。
这是可变结构危险的一个原因。它们不能通过属性进行变异,但是类的客户可能错误地认为它们可以是。