作为一项学习练习,我尝试构建一个基本的WPF应用程序,该应用程序利用MVVM模式在主选项卡中显示对象列表(简单地使用客户),然后允许用户通过打开具有某种编辑视图的另一个选项卡来编辑客户。我要坚持的是如果我想使用延期保存,如何在视图之间进行通信。我已经看到了一些关于使用MessageBus的东西,但我也看到很多关于它是如何在MVVM中反模式的。这是我到目前为止提出的代码
模型
public class Customer
{
public string Name {get; set;}
}
客户视图模型
public class CustomerViewModel
{
public string Name
{
get { return _model.Name; }
set {_model.Name = value; RaisePropertyChanged(); }
}
public void Save()
{
//Save the model to a DB/whatever
}
private Customer _model;
}
修改视图模型
public class EditCustomerViewModel
{
public string Name
{
get { return _name; }
set {_name = value; RaisePropertyChanged(); }
}
public void Save()
{
_model.Name = _name;
_model.Save();
}
private string _name;
private CustomerViewModel _model;
}
列表视图模型
public class CustomerListViewModel
{
public ObservableCollection<CustomerViewModel> Customers
{
get { return _customers; }
}
private ObservableCollection<CustomerViewModel> _customers;
}
此代码的好处是编辑客户我创建了一个编辑视图模型,该模型引用了此列表正在使用的相同视图模型,因此当保存更改时,它们会显示在列表中。缺点是我必须在编辑视图中重复很多代码。当有一些属性但不一定是很多问题时不成问题。当连接到具有许多客户的数据库时,我无法想象这种扩展,因为我必须将所有客户加载到列表中以便编辑一个(尽管可能还有其他解决方案) )。
这是解决此类问题的最佳方式,还是MVVM中有一种处理此类问题的做法?