我有类似下面给出的类/结构
公共类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
,因为它与其他程序员共享。
答案 0 :(得分:5)
不,每个对象都必须实现INotifyPropertyChanged。 PrintFile对象不会受益于FileDetails对象实现接口的事实。
此外,如果从XSD生成这些类,则可以使用XSD.EXE上的/ enableDataBinding命令行开关告诉生成器使用INotifyPropertyChanged实现自动生成类。
脚注:将实现INotifyPropertyChanged的对象放入ObservableCollection中将不会产生任何神奇的效果。对集合中的对象所做的更改不会触发集合的PropertyChanged事件(除非您编写代码来执行此操作)。只有在集合对象的属性发生更改时,才会触发集合的PropertyChanged事件。
在大多数情况下,您正在使用可观察集合,因为您希望将数据绑定到WPF或Silverlight UI元素,并且您希望UI在数据更改时自动更新。数据绑定系统会注意到集合中的对象是否实现IPropertyNotifyChanged并自动附加到PropertyChanged事件,以便UI知道数据何时发生更改。