C#Collection属性应该是只读的

时间:2014-02-03 17:25:56

标签: c# data-binding mvvm collections

我在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);
}

哪种方式适合?还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

只需使用

Foos.Clear();
Foos.AddRange(BusinessLayer.GetFoos());

但是,此代码会丢失所有更新。