C# 在ViewModel外部使用BindableCollection

C# 在ViewModel外部使用BindableCollection,c#,mvvm,caliburn.micro,C#,Mvvm,Caliburn.micro,在代码审查期间,我在我们的团队中看到了一些奇怪的东西。我们的一个开发人员创建了一个从文件中读取数据的类。在这个类中,他创建了一个方法来将数据返回到ViewModel。他使用BindableCollection(来自Caliburn.Micro)作为返回类型 public BindableCollection<T> GetData() { //read data } 公共BindableCollection GetData() { //读取数据 } 但我认为这是一个糟糕的做法,因为

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

public BindableCollection<T> GetData()
{
//read data
}
公共BindableCollection GetData() { //读取数据 } 但我认为这是一个糟糕的做法,因为BindableCollection是一个用于ViewModel而不是model的集合。我编写的代码如下所示:

public List<T> GetData()
{
//read data
}
public List GetData()
{
//读取数据
}
当然,在ViewModel中,他编写了
Items=newmodel.GetData()
,他认为这比我的
Items.AddRange(newmodel.GetData())
要好。结果是一样的。 我认为他的密码打破了严格的规定。是否还有其他更改此代码的好理由?

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

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

当ViewModel加载数据时,可以使用IList或ICollection by构造函数轻松创建ObservableCollection

我希望这有帮助

var myObservableList=新的ObservableCollection(myModel.NiceList);

BindableCollection继承自ObservableCollection.OK。但我认为这应该是一个正常的用例。这取决于你将如何处理你的收藏品。ObservableCollection用于绑定到视图。IList或ICollection用于保存数据。我希望从window load上的文件加载数据可能您使用AddRange()的解决方案比您的解决方案更快teammember@wopi ... 视图中是否使用双向绑定?如果不是,则不需要可观察的收集