可观察的收集问题

时间:2011-06-23 18:25:14

标签: c# .net inotifypropertychanged

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

  

公共类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内部署此结构。如果我实施NotifypropertychangedFileDetailsPrintFileDetails下的项目也可以获得INotifypropertychanged的好处。我相信我无法实现INotifyPropertyChanged,因为它与其他程序员共享。

1 个答案:

答案 0 :(得分:5)

不,每个对象都必须实现INotifyPropertyChanged。 PrintFile对象不会受益于FileDetails对象实现接口的事实。

此外,如果从XSD生成这些类,则可以使用XSD.EXE上的/ enableDataBinding命令行开关告诉生成器使用INotifyPropertyChanged实现自动生成类。

脚注:将实现INotifyPropertyChanged的对象放入ObservableCollection中将不会产生任何神奇的效果。对集合中的对象所做的更改不会触发集合的PropertyChanged事件(除非您编写代码来执行此操作)。只有在集合对象的属性发生更改时,才会触发集合的PropertyChanged事件。

在大多数情况下,您正在使用可观察集合,因为您希望将数据绑定到WPF或Silverlight UI元素,并且您希望UI在数据更改时自动更新。数据绑定系统会注意到集合中的对象是否实现IPropertyNotifyChanged并自动附加到PropertyChanged事件,以便UI知道数据何时发生更改。