共计 2538 个字符,预计需要花费 7 分钟才能阅读完成。
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 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 模式的实现。
原文地址: C#WPF 使用 CommunityToolkit.Mvvm 库