欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > C#WPF使用CommunityToolkit.Mvvm库

C#WPF使用CommunityToolkit.Mvvm库

2025/11/8 6:40:01 来源:https://blog.csdn.net/weixin_67170874/article/details/143452916  浏览:    关键词:C#WPF使用CommunityToolkit.Mvvm库

 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模式的实现。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词