c# - 在 ViewModel 外部使用 BindableCollection

标签 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 规则。是否还有其他充分理由更改此代码?

最佳答案

也许 ObservableCollection 就是您要找的东西?您可以使用 CollectionChanged 事件等将其绑定(bind)到 View 。

ObservableCollection

我不知道 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/

相关文章:

c# - 在第二个表格关闭时制作一个事件

wpf - 带 WPF 鼠标绑定(bind)的 Caliburn Micro

c# - 将消息传递给Caliburn Micro中的静态类

c# - LINQ:转换集合中的项目

c# - SQL 连接错误 - C#

c# - 有没有比为 MVVM 使用静态类或单例更好的方法?

.net - 使用 IronRuby 编写 WPF 应用程序有什么陷阱吗?

c# - 使用 Caliburn 的 TextboxHelper.ButtonCommand 绑定(bind)

c# - 在 try catch 中使用 try catch 好吗?

wpf databinding datatrigger 为矩形设置动画