我一直在使用 C# 开发 MVVM 应用程序,但在处理我的视图摘要的 ViewModels 集合时始终遇到一些问题。具体来说,它们都倾向于与 Model 作为 ViewModel 的私有成员的问题有关。
这方面的一个例子是创建新的 ViewModel(根据 View 的要求)。对于一些序言(尽管您可能不需要这些来帮助我)这里是示例模型和视图模型类:
Private Class Model()
{
public string Name { get; set; }
}
Public Class ViewModel()
{
Private Model _Model;
Public Void ViewModel(Model model)
{
_Model = model;
}
Public String Name
{
get
{
return _Model.Name;
}
set
{
_Model.Name = value;
}
}
}
整个模型永远不会直接作为 ViewModel 的公共成员公开。MainWindowViewModel 处理模型(私有,视图看不到这些)和 ViewModel(公共用于视图消化)的集合:
Public Class MainWindowViewModel
{
Private List<Model> _NamesModel;
Private ObservableCollection<ViewModel> _NamesViewModel;
Public Void MainWindowViewModel()
{
//Lets pretend we have a service that returns a list of models
_NamesModel = Service.Request();
foreach(Model model in _NamesModel)
{
ViewModel viewmodel = new ViewModel(model);
_NamesViewModel.Add(viewmodel);
}
}
Public ObservableCollection<ViewModel> NamesViewModel
{
get
{
return _NamesViewModel;
}
}
}
现在这就是序言,但现在我有一个问题。如何添加新的 ViewModel?我的视图中的方法是否会创建一个新的 ViewModel 并填充它?作为一个纯粹主义者,我假设视图根本不应该被允许创建或填充模型。我的 ViewModel 是否应该包含一个不接受任何内容(即没有底层模型)而是创建一个空白来填充的构造函数?
这类问题不断涌现出“纯”MVVM 方法。我不得不在我的 ViewModel (bool compare(Model model)) 中创建一个公共方法,它将一个模型(准备删除等)与它的内部模型进行比较。如果模型被公开(破坏纯度),那么做一些事情会容易得多,比如找到连接到模型的 ViewModel。