2010-04-17 46 views
2

我剛開始學習MVVM,並有一個困境。MVVM良好的設計。 DataSet或RowViewModel

如果我有一個主ViewModel,並且在這個模型中我有一些數據集。現在我應該爲數據集中的每一行創建一個新的ViewModel?或者將DataSet本身暴露爲DependencyProperty?

對於現在的數據集在其內部具有約20行,並通過各行迭代創建一個視圖模型綁定到每個行的思想....可能不適合性能原因和內存的最佳選擇未來的原因,比如有2000多行。

我還應該繼續創建一個RowViewModel並遍歷數據集來創建一個新的RowViewModel嗎?並有一個RowViewModels的ObservableCollection或只是公開DataSet?

此DataSet/ViewModel的綁定將是一個組合框,因此爲什麼只加載可見行可能會導致性能問題,因爲用戶希望能夠無任何延遲地進行滾動。

任何幫助將不勝感激。

回答

2

如果你有一個複雜的組合框,其中每一行都有一個ID,名稱,圖片(可能涉及一些邏輯)等等,並且你有一個表示每一行的視圖,那麼你需要創建rowViewModel因爲您必須測試該代碼(TDD!)。

對於簡單的組合框,您只需要在每行顯示一個字符串,綁定字符串列表或數據集就更好了。

正如彼得所說,小心使用可以長得這麼大的組合框。您的用戶不會喜歡它:)

此外,由於您擔心性能,請考慮使用DataReader填充字符串列表,而不是加載大型數據集。

乾杯,

安德烈

+0

感謝DataReader技巧,我會研究它:) – 2010-04-19 08:06:39

+0

+1爲datareader提示。是在視圖模型問題中被掛起來的,我忘記了對大數據集的質疑:) – 2010-04-19 08:36:09

1

imo的一個重要問題是:您是否需要一次顯示所有這些記錄,或者您是否有某種分頁/導航機制?

如果您要在同一視圖中顯示所有行,則爲每行創建RowViewModels顯然會增加開銷。您可以通過讓視圖模型引用基礎行而不是複製行數據來緩解部分開銷。

雖然我會研究構建某種頁面導航,因爲滾動瀏覽所有數據可能不是最好的用戶體驗。如果您堅持20的頁面大小,那麼您一次只需要20個視圖模型。

+0

誠然,我想用戶將無法看到整個1000項。這不會是最好的主意。 – 2010-04-18 00:15:29