首页 前端知识 C#WPF使用CommunityToolkit.Mvvm库

C#WPF使用CommunityToolkit.Mvvm库

2024-11-04 09:11:25 前端知识 前端哥 417 473 我要收藏

 C#WPF之快速理解MVVM模式

接上篇介绍MVVM,这里使用相关库介绍MVVM。

CommunityToolkit.Mvvm

 CommunityToolkit.Mvvm介绍

CommunityToolkit.Mvvm是Microsoft Community Toolkit的一部分,它是一个轻量级但功能强大的MVVM(Model-View-ViewModel)库,旨在帮助开发者更容易地实现MVVM设计模式。

该库提供了一些基础类,如ObservableObjectObservableRecipient,这些类实现了INotifyPropertyChanged接口,并提供了SetProperty方法,可以在属性值改变时触发PropertyChanged事件。这使得数据绑定变得更加简单和高效。

此外,该库还提供了ICommand接口的实现,如RelayCommandAsyncRelayCommand,这些类可以帮助你创建命令,命令是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模式的实现。

转载请注明出处或者链接地址:https://www.qianduange.cn//article/19888.html
标签
wpf
评论
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!