2013-02-26 29 views
0

在我的愛好項目中,我有以下的情況:MVVM INotifyPropertyChanged的在動態變化的陣列

我使用C#,WPF,MVVM(以及MVVM:嘗試)

我加載使用信息的二進制文件並將其存儲在(無符號)字節的列表中。我有一個引用列表中特定位置的類層次結構。我的應用程序有時會更改類層次結構(和引用字節),但有時也會直接字節(如複製範圍)。

我有我在窗口中綁定到映射結構的列表視圖。

更改類中的屬性時,我使用INotifyPropertyChanged,因爲它應該在MVVM中使用。但是,直接更改字節時遇到問題。目前我正在使用手動更新方法,但它變得非常混亂。

這是否有某種解決方案?

此外,字節列表可以像45 MB的數據。如果我在列表中設置通知,這意味着對於每個字節更改,我都會收到所有觀察者的通知?當我要複製例如10KB的字節一個接一個,我會有100個更新中的100個觀察者函數(處理屬性更改)?這將是一個性能殺手。

或者我也可以這樣說:現在更新類X(即類內的所有屬性更改)。我無法使用set屬性函數,因爲在複製字節時值已經更改。

回答

2

如果您要將列表中的字節存儲在列表中(List<byte>),那麼您可以簡單地將列表類型更改爲ObservableCollection<byte>,並且代碼將幾乎不變。然後你可以擺脫手動更新。

但是,如果您將數據保存在一個字節數組(byte[])中,再次最好的選擇是將其更改爲ObservableCollection<byte>,但您可能需要使用收集來更改一些代碼。

如果您有特殊情況需要處理,另一個選項可能是創建您自己的數據結構,實施INotifyPropertyChangedINotifyCollectionChanged。但是這是很多代碼來編寫的。

+0

最後一種方法似乎是最好的;我覺得現在有些類似於我正在使用的東西(但是很容易弄到一團糟)。 – 2013-02-26 12:44:20

2

你可以做你綁定到ObservableCollection<T>

+0

你的意思是完整的字節列表嗎?這將是所有項目......不知道這是否是一個好主意。這意味着所有類和所有屬性的更新。 – 2013-02-26 12:00:48