C#WPF之快速理解MVVM模式
接上篇介绍MVVM,这里使用相关库介绍MVVM。
CommunityToolkit.Mvvm
CommunityToolkit.Mvvm介绍
CommunityToolkit.Mvvm
是Microsoft Community Toolkit的一部分,它是一个轻量级但功能强大的MVVM(Model-View-ViewModel)库,旨在帮助开发者更容易地实现MVVM设计模式。
该库提供了一些基础类,如ObservableObject
和ObservableRecipient
,这些类实现了INotifyPropertyChanged
接口,并提供了SetProperty
方法,可以在属性值改变时触发PropertyChanged
事件。这使得数据绑定变得更加简单和高效。
此外,该库还提供了ICommand
接口的实现,如RelayCommand
和AsyncRelayCommand
,这些类可以帮助你创建命令,命令是MVVM模式中的一个重要组成部分。
CommunityToolkit.Mvvm
还提供了一些其他有用的特性,如消息传递、设计时数据支持等,这些特性可以帮助你更好地组织和管理你的代码。
CommunityToolkit.Mvvm
是一个强大的工具,它可以帮助你更容易地实现MVVM模式,从而提高你的代码质量和开发效率。
修改之后的ViewModel如下所示:
public partial class MainViewModel :ObservableObject { public ObservableCollection<User> Users { get; set; } public ICommand AddUserCommand { get; set; } public ICommand TestCommand { get; set; } [ObservableProperty] private string? _name; /* public string? Name { get { return _name; } set { if (_name != value) { _name = value; OnPropertyChanged(nameof(Name)); } } }*/ public int MyProperty { get; set; } [ObservableProperty] private string? _email; /* public string? Email { get { return _email; } set { if (_email != value) { _email = value; OnPropertyChanged(nameof(Email)); } } }*/ public MainViewModel() { Users = UserManager.GetUsers(); AddUserCommand = new Commands.RelayCommand(Adduser, CanAddUser); TestCommand = new Commands.RelayCommand(TestAction, CanTest); } public event PropertyChangedEventHandler? PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } [RelayCommand] private void Adduser(object obj) { User user = new User(); user.Name = Name; user.Email = Email; UserManager.AddUser(user); } private bool CanAddUser(object obj) { return true; } private bool CanTest(object obj) { return true; } [RelayCommand] private void TestAction(object obj) { Users[0].Name = "demo"; Users[0].Email = "1130@qq.com"; //Name = "demo"; //Email = "1130@qq.com"; } }
复制
修改之后的User类如下所示:
public partial class User:ObservableObject { [ObservableProperty] private string? _name; /* public string? Name { get { return _name; } set { if(_name!= value) { _name = value; OnPropertyChanged(nameof(Name)); } } } */ [ObservableProperty] private string? _email; /*public string? Email { get { return _email; } set { if (_email != value) { _email = value; OnPropertyChanged(nameof(Email)); } } }*/ public event PropertyChangedEventHandler? PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
复制
现在我们的ViewModel与Model就可以简化了。
MVVM模式,创建实现ICommand
接口的RelayCommand
类,实现INotifyPropertyChanged
接口的MainViewModel
类与User
类。使用数据绑定与命令绑定改写xaml页面。
最后手动实现MVVM模式,需要写很多代码,比较复杂与麻烦,我们使用MVVM库来简化MVVM模式的实现。