在ViewModel外部使用BindableCollection

时间:2014-08-08 10:44:54

标签: c# mvvm caliburn.micro

在我们的代码审查期间,我看到一些奇怪的事情。我们的一位开发人员创建了从文件中读取数据的类。在这个类中,他创建了将此数据返回给ViewModel的方法。他使用BindableCollection(来自Caliburn.Micro)作为返回类型。

public BindableCollection<T> GetData()
{
//read data
}

但我认为这是一个不好的做法,因为BindableCollection是一个与ViewModel一起使用而不是模型的集合。我编写的代码如下:

public List<T> GetData()
{
//read data
}

当然,在ViewModel中,他写了Items=new model.GetData(),他认为这比我的Items.AddRange(new model.GetData())更好。结果是一样的。 我认为他的代码打破了SOLID规则。有没有其他好的理由来改变这段代码?

1 个答案:

答案 0 :(得分:1)

也许 ObservableCollection 正是您要找的?您可以使用CollectionChanged事件将其绑定到视图,依此类推。

ObservableCollection

我不知道Caliburn.Micro BindableCollection,但主要是你应该在ViewModel中使用IObserable继承集合,在模型中使用IList或ICollection。

当您的ViewModel正在加载数据时,您可以通过构造函数轻松创建带有IList或ICollection的ObservableCollection。

我希望这有帮助。

var myObservableList = new ObservableCollection<MyModelType>(myModel.NiceList);