MVVM - 我应该公开ReadOnlyObservableCollection,ReadOnlyCollection,ICollection等吗?

时间:2011-07-29 14:41:50

标签: c# wpf mvvm observablecollection readonly-collection

基本上,我总是在理解你应该尽可能地返回公开基类型并且在内部担心实现细节,这是有道理的......

但是,我不知道该怎么做。基本上,我现在有:

ReadOnlyObservableCollection<Foo> MyFoos {get; private set; }

我想知道是否应该将其作为ReadOnlyCollection<Foo>ICollection<Foo>返回,因为在内部我从未真正使用任何可观察的部分或尝试写入集合。 WPF似乎不关心我返回什么,它仍然绑定它并正确触发集合更改通知事件。但是,我在某个地方读到了我应该设计它以确实有任何消费视图处理我的ViewModel。

所以我在这里有点不知所措。我认为将它留作ReadOnlyObservableCollection<T>最有意义的是明确地告诉消费者视图他们能够和不能对该属性做什么,但我也认为你应该减少类型到他们的基本类型,你可以。所以我不知道该怎么做。特别是因为WPF不关心我返回的是什么类型,它会发现它是可观察的。

2 个答案:

答案 0 :(得分:8)

我可能会将其保留为ReadOnlyObservableCollection,因为它非常具体地说明了您的ViewModel的消费者可以对您的集合做什么。另请注意,WPF实际上并不直接绑定到您的集合,它绑定到CollectionViewSource.GetDefaultView的返回值,返回ICollectionViewICollectionView合同中有INotifyCollectionChanged

答案 1 :(得分:2)

performance perspective开始,您希望至少将项目源用作实现INotifyCollectionChanged的集合。 MVVM提供了很多好处,但主要关注单元测试和关注点分离,因此选择使用ReadOnlyObservableCollection还是使用ICollection{T}这样的界面将取决于您的单元测试目标。 / p>