摘要
在计算机编程领域,MVVM(Model-View-ViewModel)模式是一种常用的软件架构模式。它主要由三个组件构成:模型(Model)、视图(View)和视图模型(ViewModel)。这种模式旨在通过分离用户界面(View)和应用程序逻辑(Model和ViewModel)来提高代码的可维护性和可重用性。
在WPF(Windows Presentation Foundation)和VUE(Vue.js)等前端框架中,MVVM模式已经被广泛采用。它们的视图层与视图模型紧密耦合,使得前端应用程序更加灵活、易于维护。同时,这种模式还提供了一种清晰的编程模型,可以让开发人员更容易地实现状态管理、数据绑定和UI交互等功能。
相比之下,在WINFORM(Windows Forms)应用程序中,MVVM模式并不是非常流行。这可能是因为WINFORM的设计哲学更注重图形界面和应用程序的外观,而不是程序的内部结构和逻辑。此外,WINFORM还提供了一些现成的工具和组件,使得开发人员可以更容易地创建交互式用户界面。
正文
先创建一个MODEL
public class Person : INotifyPropertyChanged
{
private string _name;
private string _email;
private string _phone;
public string Name
{
get
{
return this._name;
}
set
{
this._name = value;
OnPropertyChanged("Name");
}
}
public string Email
{
get
{
return this._email;
}
set
{
this._email = value;
OnPropertyChanged("Email");
}
}
public string Phone
{
get
{
return this._phone;
}
set
{
this._phone = value;
OnPropertyChanged("Phone");
}
}
public event PropertyChangedEventHandler? PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
if(PropertyChanged!=null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
在UI上绑定属性
Person person;
public Form1()
{
InitializeComponent();
person = new Person()
{
Name = "Test",
Email = "test@163.com",
Phone = "1877777777"
};
txtEmail.DataBindings.Add(new Binding("Text", person, "Email"));
txtName.DataBindings.Add(new Binding("Text", person, "Name"));
txtPhone.DataBindings.Add(new Binding("Text", person, "Phone"));
label1.DataBindings.Add(new Binding("Text", person, "Name"));
label2.DataBindings.Add(new Binding("Text", person, "Email"));
label3.DataBindings.Add(new Binding("Text", person, "Phone"));
}
这样基本完成了一个绑定,但这个事件是在changed后发生的,不像vue等可以为keypress事件。其实了解其原理,也就是一个Property的changed。
- VM模型引用INotifyPropertyChanged接口,当属性发生改变时,即执行了set访问器,触发事件
- 将控件的属性与模型属性绑定