Skip to main content
 首页 » 编程设计

c#之可观察集合问题

2024年02月03日28luoye11

我有一个类似下面给出的类/结构

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 知道数据何时发生变化。