在我们的代码审查期间,我看到一些奇怪的事情。我们的一位开发人员创建了从文件中读取数据的类。在这个类中,他创建了将此数据返回给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规则。有没有其他好的理由来改变这段代码?
答案 0 :(得分:1)
也许 ObservableCollection 正是您要找的?您可以使用CollectionChanged事件将其绑定到视图,依此类推。
我不知道Caliburn.Micro BindableCollection,但主要是你应该在ViewModel中使用IObserable继承集合,在模型中使用IList或ICollection。
当您的ViewModel正在加载数据时,您可以通过构造函数轻松创建带有IList或ICollection的ObservableCollection。
我希望这有帮助。
var myObservableList = new ObservableCollection<MyModelType>(myModel.NiceList);