2010-06-21 67 views
0

我有大量的MyFile對象集合,它們之間以各種方式鏈接,如麪條。 此外,從這個集合中,我創建了一些項目的較小的子集合,這些子集合由一些條件相等。 (例如所有擴展名爲.txt的文件,屬於某個目錄的所有文件等等)MVVM的ViewModel層中的複雜數據結構

基本上我的業務邏輯中有複雜的鏈表結構。現在我想爲這個 創建ViewModel,以便爲View做準備,而這正是我碰壁的地方。我只是不知道如何準備這個混亂 ,仍然保持一切有效和組織。

第一個問題是由項目列舉項目和創建itemViewModel 包裹在collectionViewModel每個集合將創建重複itemViewModel每個項目(因爲一個項目可以包含在多個集合)

第二個問題是如何保持一切都更新?例如,如果業務邏輯中的item1將其項目2 中的引用更改爲item3,則ViewModels應相應地更新它們。

我真的很想在這裏突破MVVM模式,儘管我不想要它,並且把bussines +表示邏輯 放在一個對象/類中,因爲這個意大利麪條結構對於我對MVVM的理解程度似乎有點太多了。

謝謝

回答

0

也許我在這裏叫了錯誤的樹,但是在這裏。

您可以擁有一個Model,它充當您所有文件對象的存儲庫,並且還會公開一個ItemAdded和ItemRemoved事件以及一個Query方法。然後你可以有一個共同的ViewModel類型來代表你在這個模型上的視圖(一個ViewModel),但是通過組成一個查詢來專門化。通過這種方式,您可以爲每個需要表示的視圖創建ViewModel + Query(例如所有帶有擴展名爲txt的文件)實例。 ViewModel將負責在模型上執行查詢(通過調用查詢方法),然後將結果轉換爲可觀察的文件項目集合(或您擁有的東西)。您可以通過訂閱ItemAdded和ItemRemoved事件來更新您的ViewModel以響應模型更改。如果在ItemRemoved事件上,您的ViewModel文件項目集合包含該項目,然後將其刪除。如果在ItemAdded事件上該項目匹配該ViewModel實例的查詢條件,則將其添加到該集合中。

這使您可以爲所有文件創建單個模型,然後爲您希望表示的每種類型的視圖創建一個ViewModel(+ Query)實例。 ItemAdded和ItemRemoved事件允許你更新你的ViewModel。由於ViewModel中的項目是可觀察集合,因此您的數據綁定視圖將自行更新。