【发布时间】:2014-02-03 17:25:55
【问题描述】:
我在 Visual Studio 中运行代码分析并收到以下警告:
CA2227:集合属性应该是只读的。
我知道这意味着什么,以及为什么我不应该有一个公共集。 但我不知道如何处理它。
在我的ViewModel 我有这个属性:
private ObservableCollection<Foo> _foos = new ObservableCollection<Foo>();
public ObservableCollection<Foo> Foos
{
get { return _foos; }
set
{
_foos = value;
OnPropertyChanged();
}
}
此属性绑定到视图。
如何填充这个集合的逻辑在业务层。有一个函数返回一个
ObservableCollection<Foo>
如果 Foos 没有二传手,我就不能这样做。
Foos = BusinessLayer.GetFoos();
我可以这样做:
_foos = BusinessLayer.GetFoos();
OnPropertyChanged("Foos");
或者这个:
var foos = BusinessLayer.GetFoos();
foreach(var foo in foos)
{
Foos.Add(foo);
}
哪种方式合适?有更好的方法吗?
【问题讨论】:
-
我同意 Collection 属性应该是只读的。从您的类内部实例化一次集合。然后处理它的项目,而不是集合本身。
-
顺便说一句,您的业务层不应返回 ObservableCollections。这是一个与业务逻辑无关的 ViewModel 概念。
标签: c# data-binding mvvm collections