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

mic*_*ael 4 c# wpf observablecollection mvvm readonly-collection

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

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

ReadOnlyObservableCollection<Foo> MyFoos {get; private set; }
Run Code Online (Sandbox Code Playgroud)

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

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

Mat*_*ira 8

我可能会留下它,ReadOnlyObservableCollection因为它非常具体地说明了允许您的ViewModel的消费者使用您的集合.另请注意,WPF实际上并不直接绑定到您的集合,它绑定到CollectionViewSource.GetDefaultView的返回值,后者返回一个ICollectionView.ICollectionView具有INotifyCollectionChanged在其合同.