【问题标题】:observablecollection questionobservablecollection 问题
【发布时间】:2011-06-23 18:25:14
【问题描述】:

我有一个如下所示的类/结构

公共类文件详细信息 { 公共文件详细信息() { }

    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;}

}

在上面的 sn -p PrintFile 中定义了一个 XSD。我计划在ObservableConnection 中部署这个结构。如果我实施NotifypropertychangedFileDetailsPrintFileDetails 下的项目也能获得INotifypropertychanged 的好处。我相信我无法实现 INotifyPropertyChanged,因为它在其他程序员之间共享。

【问题讨论】:

    标签: c# .net inotifypropertychanged


    【解决方案1】:

    不,每个对象都必须自己实现 INotifyPropertyChanged。 PrintFile 对象并没有从 FileDetails 对象实现接口这一事实中受益。

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

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

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

    【讨论】:

    • 谢谢,如果我使用 /enableDataBinding,它会为 xsd 中的所有项目生成 INotifyPropertyChanged 吗?是否可以为 XSD 中的特定项目生成 INotifyPropertyChanged?
    • XSD 支持指定使用 /e 开关发出类类型的元素。我想您可以运行 XSD 两次,一次用于您不想要属性更改通知的类,一次用于您确实想要属性更改通知的类,然后将源文件拼接在一起。每次从 XSD 生成时,都需要重复大量的手工工作。仅在所有内容上生成属性通知会简单得多。
    猜你喜欢
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    相关资源
    最近更新 更多