【问题标题】:Two-way databinding to POCO without INotifyPropertyChanged没有 INotifyPropertyChanged 的 POCO 的双向数据绑定
【发布时间】:2011-04-12 06:21:29
【问题描述】:
当数据源对象的属性未在其设置器中引发 PropertyChanged 事件时,双向数据绑定如何在 Silverlight 中工作?
例如,在代码示例中,我看到数据绑定到 System.Windows.Point 结构的实例,它没有实现 INotifyPropertyChanged 并且是可变的。如果有人直接在 Point 中设置 X 和 Y 属性,而不是用新实例替换对象,会发生什么(或应该发生)?
【问题讨论】:
标签:
c#
silverlight
data-binding
xaml
inotifypropertychanged
【解决方案1】:
用户界面不更新。这里没有魔法。未抛出任何事件意味着 UI 将错过更新。
【解决方案2】:
Point 是一个结构体,因此即使 Point 是可变的,您从属性调用中获得的 Point 与存储在底层字段中的 Point 并不相同;这是一个副本。因此,如果您更改副本,则基础字段保持不变。不需要属性更改通知,因为属性的值实际上并没有改变。如果该类实际上直接在其私有字段中对 Point 进行了变异,则只会出现问题。当结构发生突变时,类实现者要么不这样做,要么手动调用 PropertyChanged 通知。
这就是可变结构很危险的原因之一。它们不能通过属性进行变异,但类的客户可能会错误地认为它们可以。