Dot-Net

MVP/MVVM - 列表過濾,誰負責?

  • October 27, 2009

我正在實現一個顯示項目列表的 wpf 應用程序,並提供通過在文本框中鍵入來過濾此列表的功能(我認為這是非常微不足道的案例)。

我們使用的是 MVVM 結構。

我的問題是,過濾列表是誰的責任?視圖還是視圖模型?我應該在 xaml.cs 中實現“OnTextChanged”事件,還是應該使用 ViewModel 中的屬性並使用 PropertyChanged 過濾列表。

後續問題是,我應該在 ViewModel 中使用 BindingList/ObservableCollection,還是使用 ICollectionView 將 ItemsControl 綁定到?

我嘗試了這兩種方法,它們都有效。賦予 ViewModel 責任使 View 後面的程式碼保持空白,但另一方面,我並不完全相信應用過濾是 ViewModel 的責任(例如:不同的視圖可能需要不同的過濾)

有什麼想法嗎?

謝謝,羅爾

編輯:

將它放在 ViewModel 中困擾我的是(在我目前的實現中)有一個引用 System.Windows.Data。這是我寧願在 ViewModel 中沒有的參考,因為它顯然與 View 相關。還是我錯過了什麼?相關程式碼:

ICollectionView customerView = CollectionViewSource.GetDefaultView(customers);

ViewModel,毫無疑問。避免程式碼隱藏是該模式的最終目標——實際上,ViewModel 本身就是視圖背後的程式碼。

例如:不同的視圖可能需要不同的過濾

不同的視圖應該有不同的 ViewModel。ViewModel 基本上是一種(多一些)物件導向的程式碼隱藏文件方法。

關於 CollectionView:可以在視圖 XAML 中定義 CollectionViewSource,然後將其排序和過濾屬性綁定到 ViewModel。這應該在 ViewModel 和 CollectionView 中保持控制,但我相信它是過度設計的。

引用自:https://stackoverflow.com/questions/1576817