视图模型是您跟踪特定于视图而不是模型所必需的属性的地方。
让我们以您的模型为例,假设它被称为Person
.
Person
然后为被调用创建一个视图模型PersonViewModel
,如下所示:
public class PersonViewModel
{
public Person Person { get; set; }
}
(注意,您可能不想直接像这样公开模型,但这是另一回事)
现在假设您在视图中有一个用于保存Person
实例的按钮。为了提供更好的用户体验 (UX),您希望仅在您的模型实际发生更改时才启用该按钮。所以你在类上实现INotifyPropertyChanged
接口Person
:
public class Person : INotifyPropertyChanged
{
...
现在,您可以HasUnsavedChanges
从您Person
的属性中公开一个属性Enabled
,保存按钮上的属性将绑定到该属性,但该逻辑与人无关。
这就是视图模型的用武之地。您可以在视图模型上定义这个特定于视图的属性,如下所示:
public class PersonViewModel
{
public Person Person { get; set; }
public bool HasUnsavedChanges { get; set; }
}
然后,您的视图模型将订阅界面的PropertyChanged
事件,INotifyPropertyChanged
并在视图模型上切换HasUnsavedChanges
属性。
然后,如果绑定设置正确,当您的模型发生任何更改时,保存按钮将启用/禁用,但您的模型没有任何逻辑将其绑定到视图。
请注意,您还必须INotifyPropertyChanged
在视图模型上实现,以便您的视图在对其绑定的视图模型进行更改时拾取。
同样,该点充当了桥梁,以包含不属于模型的模型属性和视图属性的组合逻辑。