在代码审查期间,我在我们的团队中看到了一些奇怪的东西。我们的一位开发人员创建类来从文件中读取数据。在这个类中,他创建了将此数据返回给 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 规则。是否还有其他充分理由更改此代码?
最佳答案
也许 ObservableCollection 就是您要找的东西?您可以使用 CollectionChanged 事件等将其绑定(bind)到 View 。
我不知道 Caliburn.Micro BindableCollection,但主要是您应该在 ViewModel 中使用 IObserable 继承集合,在模型中使用 IList 或 ICollection。
当您的 ViewModel 正在加载数据时,您可以通过构造函数轻松地创建一个带有 IList 或 ICollection 的 ObservableCollection。
希望对您有所帮助。
var myObservableList = new ObservableCollection<MyModelType>(myModel.NiceList);
关于c# - 在 ViewModel 外部使用 BindableCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25201700/