-1

以下代码说明了我的问题:

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)添加额外的视图特定字段。如果我有一个丰富的域模型,为什么我不能将它暴露给视图?

在 Asp.net MVC 中,我们学会了直接绑定到模型,这很好,但在 WPF 中不是吗?为什么?

什么证明额外的开销是合理的?

4

2 回答 2

0

当你看到像 A 这样的方法时,要么是底层对象不支持,要么是因为INotifyPropertyChanged实际实现需要灵活性。

看到它Person可以改变,然后你需要重建你的 UI。但是考虑一下您的逻辑驻留在另一个 DLL 上并将您的 ViewModel 绑定到代理的场景。那么你的模型是否改变也没关系,你不需要再次重新编译你的UI。

于 2012-09-16T15:21:27.213 回答
0

MVVM 与没有 View-Model 的 MVC 不同(更像是一个三角形而不是一条线)。不直接绑定到模型的一个原因是保持依赖最小化,因此如果模型发生变化,您可能只需要调整 VM 而不是 VM视图。

于 2012-09-16T15:25:50.543 回答