我最近开始学习wpf,并尝试使用mvvm。
我的理解是,在mvvm中,视图和模型都不应该知道对方的存在。
我想要做的是在屏幕上显示客户列表。但是如果我按照下面所示的viewModel编写代码,这与我在网上看到的许多示例类似,那么我最终会得到一些像这样的代码:
class Customer
{
public String Name {get;set;}
public String Address {get;set;} }
}
class MainWindowViewModel
{
ObservableCollection<Customer> customers = new ObservableCollection<Customer>();
public ObservableCollection<Customer> Customer
{
get {return customers;}
}
public MainWindowViewModel()
{
//cust1 and cust2 are Customer objets
customers.Add(cust1);
customers.Add(cust2);
}
}
现在,如果我创建一个MainWindowViewModel实例并将其设置为我的MainWindowView(我的视图)的数据上下文,并且进一步将视图模型的Customers属性绑定到listBox,则视图将需要引用包含我的Models的程序集。
所以我的问题是:
1)在MVVM中添加对Models程序集的引用是否允许?因为这意味着视图知道模型。
2)更好的解决方案是将每个Customer对象封装在CustomerViewModel中,并使MainWindowViewModel包含ObservableCollection of CustomerViewModel而不是ObservableCollection of Customer。这将完全将模型与视图分离。