我有一个类似下面给出的类/结构
public class FileDetails { public FileDetails() { }
public PrintFile PrintFileDetails { get; set; } public Boolean IsSelected { get; set; } public DateTime UploadTime { get; set; } public long FileSize { get; set; } public UploadTypes TypeOfUpload { get; set; } public DateTime DownloadStartTime {get;set;} public DateTime DownloadEndTime {get;set;} public bool ShouldDownload{get;set;} }
在上面的代码片段中,PrintFile 是在 XSD 中定义的。我计划在 ObservableConnection 中部署此结构。如果我实现 NotifypropertychangedFileDetails,PrintFileDetails 下的项目也将能够获得 INotifypropertychanged 的好处。我相信我无法实现 INotifyPropertyChanged,因为它在其他程序员之间共享。
请您参考如下方法:
不,每个对象必须自己实现 INotifyPropertyChanged。 PrintFile 对象没有受益于 FileDetails 对象实现接口(interface)这一事实。
此外,如果您从 XSD 生成这些类,您可以使用 XSD.EXE 上的/enableDataBinding 命令行开关告诉生成器自动生成具有 INotifyPropertyChanged 实现的类。
脚注:将实现 INotifyPropertyChanged 的对象放入 ObservableCollection 中不会产生任何神奇效果。对集合中的对象所做的更改不会触发集合的 PropertyChanged 事件(除非您编写代码来这样做)。集合的 PropertyChanged 事件仅在集合对象的属性发生更改时触发。
在大多数情况下,您使用可观察集合是因为您希望将其数据绑定(bind)到 WPF 或 Silverlight UI 元素,并且您希望 UI 在数据更改时自动更新。数据绑定(bind)系统会注意到集合中的对象是否实现了 IPropertyNotifyChanged 并将自动附加到 PropertyChanged 事件,以便 UI 知道数据何时发生变化。
