2010-06-11 56 views
4

我一直在擺弄MVVM模式,現在我正在嘗試基於它實現一個小應用程序。MVVM什麼樣的部分模式負責數據網格的分組

此應用程序有一個數據網格,其中,足夠令人驚訝的是,呈現一些數據。現在我正在嘗試添加一些分組功能。我知道如何在代碼(C#和XAML)中編寫它,但是我想知道在哪個層我應該放置負責任的代碼。

我的一部分告訴我應該在視圖中,因爲它是特定視圖的代碼。它不是通用的,並且有一個目的:對數據進行分組。

另一方面,我認爲我應該使用命令在ViewModel中處理它。但感覺,就好像我用View的特定邏輯污染了我的ViewModel。

任何可以擺脫這一切的韌帶?

回答

7

在我的大部分應用MVVM我試圖分裂這樣的責任:

  • 的觀點應該只是進行簡單的翻譯 視圖模型的數據來 像素。通常這會導致大多數XAML和很少的代碼。
  • 該視圖模型應該執行 特定於視圖的邏輯,如分組 等。我甚至經常有每個視圖有多個視圖模型。您可以擁有一個主視圖模型,將每個組的子視圖模型列表展示給您的視圖,以便實現分組。
  • 如果您有任何適用於多個視圖模型的邏輯,那麼它可能是 域邏輯,應該進入 域模型。

所以我認爲分組應該在視圖模型中進行。

+1

+1我認爲虛擬機也是......其他的一點是可測試性 - 你想測試分組邏輯而不需要實例化視圖 – kiwipom 2010-06-11 08:30:43

+0

@IanR我怎麼能忘記可測試性的角度? :-) 好點子。 – Mendelt 2010-06-11 08:36:06

+0

@IanR我怎麼能忘記可測試性的角度?:-)好點 ;) – user362397 2010-06-11 08:37:56

0

沒有人回答這個問題。這取決於你的情況:

1)用戶是否對此有影響?如果他們不這樣,而且它是一個固定的分組,我會用IGrouping發佈一個屬性,並在進入視圖之前使用dataservice或LINQ來完成它。

如果您在視圖中進行分組,那麼它的性能通常較差,但這不是一個明確的選擇。如果用戶可以選擇很多不同的分組,這可能是一種值得支付的懲罰,以增加可用性。

+0

用戶有,這是一個測試用例來檢查WPF在我們的下一個大項目中的適用性。在這種情況下,用戶可以完全控制數據網格。分組,排序和過濾應該由用戶最大限度地進行自定義。 – user362397 2010-06-11 08:29:43

+0

好的 - 那麼你可能想看看XCeed的datagrid(http://xceed.com/Grid_WPF_Intro.html)或Infragistics數據網格(http://www.infragistics.com/dotnet/netadvantage/wpf/xamdatagrid.aspx#Overview ) - 他們已經內置了對這種事物的支持。 – Goblin 2010-06-11 08:38:00

0

如果用戶對分組有一些影響,我會綁定到由ViewModel公開的ICollectionView。該視圖支持分組,過濾,排序和貨幣,ICollectionView接口來自System.ComponentModel,因此您不必爲ViewModel項目添加「gui」引用。此外,WPF DataGrid支持ICollectionView接口。

如果用戶對分組沒有影響(這些組是固定的),我只是將數據分組在模型中。 HTH。