4

基本上,我一直认为您应该尽可能返回公开的基本类型,并担心内部的实现细节,这是有道理的......

但是,我不确定在这里做什么。基本上,现在我有:

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

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

所以我在这里有点崩溃。我认为将其保留为ReadOnlyObservableCollection<T>最有意义的是明确告诉消费视图他们可以对属性做什么和不能做什么,但我也觉得你应该在你的时候将类型减少到它们的基本类型能够。所以我不确定在这里做什么。尤其是 WPF 不关心我返回什么类型的事实,它发现它是可观察的。

4

2 回答 2

8

我可能会留下它,ReadOnlyObservableCollection因为它非常明确地说明了您的 ViewModel 的消费者可以对您的集合做什么。另请注意,WPF 实际上并不直接绑定到您的集合,它绑定到CollectionViewSource.GetDefaultView的返回值,该值返回一个ICollectionView. ICollectionViewINotifyCollectionChanged其合同中。

于 2011-07-29T14:51:07.713 回答
2

性能的角度来看,您至少希望将项目源用作实现INotifyCollectionChanged的​​集合。MVVM 提供了很多好处,但主要关注单元测试和关注点分离,因此选择是使用ReadOnlyObservableCollection还是ICollection{T}之类的接口将基于您的单元测试目标。

于 2011-07-29T14:51:25.860 回答