2011-06-23 43 views
1

我有像下面的ObservableCollection問題

公共類FileDetails { 公共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,因爲它在其他程序員之間共享。

回答

5

不,每個對象都必須實現INotifyPropertyChanged本身。 PrintFile對象不受益於FileDetails對象實現接口的事實。另外,如果您從XSD生成這些類,則可以使用XSD.EXE上的/ enableDataBinding命令行開關自動生成帶有INotifyPropertyChanged實現的類。

腳註:將實現INotifyPropertyChanged的對象放入ObservableCollection中將不會有任何魔法效果。對集合中的對象所做的更改不會觸發集合的PropertyChanged事件(除非您編寫代碼來執行此操作)。集合的PropertyChanged事件僅在集合對象的屬性更改時觸發。

在大多數情況下,您使用的是可觀察集合,因爲您希望將數據綁定到WPF或Silverlight UI元素,並且希望UI在數據更改時自動更新。數據綁定系統會注意到集合中的對象是否實現IPropertyNotifyChanged並自動附加到PropertyChanged事件,以便UI知道數據何時更改。

+0

謝謝,如果我使用/ enableDataBinding它會爲xsd內的所有項目生成INotifyPropertyChanged嗎?是否有可能爲XSD中的特定項目生成INotifyPropertyChanged? – logeeks

+1

XSD支持指定使用/ e開關發出類類型的元素。我想你可以兩次運行XSD,一次是不想更改屬性的通知,一次是需要更改通知的類,然後將源文件拼接在一起。這是每次從XSD生成時必須重複的大量手工工作。只要在任何事情上產生屬性通知就簡單多了。 – dthorpe

相關問題