C# 双向数据绑定到POCO而不更改InotifyProperty
当数据源对象的属性在其setter中未引发C# 双向数据绑定到POCO而不更改InotifyProperty,c#,silverlight,data-binding,xaml,inotifypropertychanged,C#,Silverlight,Data Binding,Xaml,Inotifypropertychanged,当数据源对象的属性在其setter中未引发PropertyChanged事件时,双向数据绑定在Silverlight中如何工作 例如,在代码示例中,我看到数据绑定到System.Windows.Pointstruct的实例,该结构未实现INotifyPropertyChanged,并且是可变的。如果有人直接在点中设置X和Y属性,而不是用新实例替换对象,会发生(或应该发生)什么情况?UI不会更新。这里没有魔法。没有引发事件意味着UI将错过更新。点是一个结构,因此即使点是可变的,从属性调用获得的点与
PropertyChanged
事件时,双向数据绑定在Silverlight中如何工作
例如,在代码示例中,我看到数据绑定到
System.Windows.Point
struct的实例,该结构未实现INotifyPropertyChanged
,并且是可变的。如果有人直接在点中设置X
和Y
属性,而不是用新实例替换对象,会发生(或应该发生)什么情况?UI不会更新。这里没有魔法。没有引发事件意味着UI将错过更新。点是一个结构,因此即使点是可变的,从属性调用获得的点与存储在基础字段中的点不同;这是副本。因此,如果对副本进行变异,则基础字段保持不变。不需要属性更改通知,因为属性的值实际上没有更改。只有当类实际上直接改变了其私有字段中的点时,才会出现问题。当结构发生变化时,类实现者可以不这样做,也可以手动调用PropertyChanged通知
这就是可变结构危险的原因之一。它们不能通过属性进行变异,但类的客户端可能错误地认为它们可以