Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 双向数据绑定到POCO而不更改InotifyProperty_C#_Silverlight_Data Binding_Xaml_Inotifypropertychanged - Fatal编程技术网

C# 双向数据绑定到POCO而不更改InotifyProperty

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将错过更新。点是一个结构,因此即使点是可变的,从属性调用获得的点与

当数据源对象的属性在其setter中未引发
PropertyChanged
事件时,双向数据绑定在Silverlight中如何工作


例如,在代码示例中,我看到数据绑定到
System.Windows.Point
struct的实例,该结构未实现
INotifyPropertyChanged
,并且是可变的。如果有人直接在点中设置
X
Y
属性,而不是用新实例替换对象,会发生(或应该发生)什么情况?

UI不会更新。这里没有魔法。没有引发事件意味着UI将错过更新。

点是一个结构,因此即使点是可变的,从属性调用获得的点与存储在基础字段中的点不同;这是副本。因此,如果对副本进行变异,则基础字段保持不变。不需要属性更改通知,因为属性的值实际上没有更改。只有当类实际上直接改变了其私有字段中的点时,才会出现问题。当结构发生变化时,类实现者可以不这样做,也可以手动调用PropertyChanged通知

这就是可变结构危险的原因之一。它们不能通过属性进行变异,但类的客户端可能错误地认为它们可以