WPF (Windows Presentation Foundation)是.NET Framework的一部分,它提供了一种用于构建丰富的Windows桌面应用程序的方式。MVVM (Model-View-ViewModel) 是一种特定于UI的设计模式,它利用强大的数据绑定特性,是WPF和其它XAML基础的开发框架的首选设计模式。
MVVM模式将应用程序分为三个部分:
MVVM的主要优点是分离视图和模型,这样就可以使每个部分独立进行开发、测试和修改,同时还能保证UI和业务逻辑的同步。
下面是一个简单的WPF MVVM模式的代码示例:
Model(Person.cs):
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
ViewModel(PersonViewModel.cs):
public class PersonViewModel : INotifyPropertyChanged
{
private Person _person;
public PersonViewModel()
{
_person = new Person { Name = "Tom", Age = 30 };
}
public string PersonName
{
get { return _person.Name; }
set
{
if (_person.Name != value)
{
_person.Name = value;
OnPropertyChanged("PersonName");
}
}
}
public int PersonAge
{
get { return _person.Age; }
set
{
if (_person.Age != value)
{
_person.Age = value;
OnPropertyChanged("PersonAge");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
View(MainWindow.xaml):
<Window x:Class="MVVMExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MVVMExample"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel>
<Label Content="Name" />
<TextBox Text="{Binding PersonName}" />
<Label Content="Age" />
<TextBox Text="{Binding PersonAge}" />
StackPanel>
Grid>
Window>
在这个例子中,我们创建了一个表示人的模型(Person)。视图模型(PersonViewModel)包含了一个人的实例,并有两个属性,分别对应人的名字和年龄。这两个属性在设置值时触发PropertyChanged事件,这样用户界面就可以知道值已经改变。最后,视图(MainWindow.xaml)中的两个文本框分别绑定到了视图模型的PersonName和PersonAge属性。
注意,为了让这个例子工作,你需要在MainWindow的构造函数中设置DataContext:
public MainWindow()
{
InitializeComponent();
this.DataContext = new PersonViewModel();
}
这样,视图就可以通过数据绑定访问视图模型的属性了。