【问题标题】:Using BindableCollection outside ViewModel在 ViewModel 之外使用 BindableCollection
【发布时间】:2014-08-08 10:44:53
【问题描述】:

在代码审查期间,我在我们的团队中看到了一些奇怪的东西。我们的一位开发人员创建了从文件中读取数据的类。在这个类中,他创建了将此数据返回给 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 规则。是否有任何其他好的理由来更改此代码?

【问题讨论】:

标签: c# mvvm caliburn.micro


【解决方案1】:

也许 ObservableCollection 是您正在寻找的?您可以使用 CollectionChanged 事件等将其绑定到视图。

ObservableCollection

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

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

我希望这会有所帮助。

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

【讨论】:

  • BindableCollection 继承自 ObservableCollection。
  • 好的。但我认为这应该是一个正常的用例。这取决于您打算如何处理您的收藏。 ObservableCollection 用于绑定到视图。 IList 或 ICollection 用于保存数据。
  • 我想在窗口加载时从文件中加载数据
  • 也许您使用 AddRange() 的解决方案比您的团队成员的解决方案更快
  • @wopi ...您在视图中使用双向绑定吗?如果不是,您不需要 ObservableCollection
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多