以下代码说明了我的问题:
public class Person : (INotifyPropertyChanged) // INPC only for PersonViewModelB
{
public string Name {get; set;}
}
public class PersonViewModelA : INotifyPropertyChanged
{
private Person _person {get; set;}
public string Name
{
get { return _person.Name; }
set { _person.Name = value; }
}
//XAML: {Binding Name}
}
public class PersonViewModelB : INotifyPropertyChanged
{
private Person Person {get; set;}
//XAML: {Binding Person.Name}
}
在很多例子中,我见过像PersonViewModelA这样的东西。我不明白这个好处。对我来说,PersonViewModelB更干净,更干燥。
在这两种情况下,我都可以向ViewModel(例如IsSelected)或计算字段(例如Name = FirstName +“”+ LastName)添加其他视图特定字段。如果我有一个richt域模型,为什么我不能将它暴露给视图?
在Asp.net MVC中,我们已经学会了将directy绑定到模型,并且它很好,但在WPF中它不是吗?为什么?
什么证明额外的开销是合理的?
答案 0 :(得分:0)
当你看到像A这样的方法是因为底层对象不支持INotifyPropertyChanged
,或者因为实际实现需要灵活性。
看到Person
可以更改,然后您需要重建UI。但请考虑一下您的逻辑驻留在另一个DLL上并将ViewModel绑定到代理的情况。然后,如果您的模型发生变化并不重要,则无需再次重新编译UI。
答案 1 :(得分:0)
MVVM与MVC不同,MVC没有View-Model(并且更像是一个三角形而不是一条线)。不直接绑定到模型的一个原因是保持依赖关系最小化,因此如果模型更改,您可能只需要调整VM而不是VM 和视图。