C#WPF使用CommunityToolkit.Mvvm库

16,342次阅读
没有评论

共计 2538 个字符,预计需要花费 7 分钟才能阅读完成。

 C#WPF 之快速理解 MVVM 模式

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

CommunityToolkit.MvvmC#WPF 使用 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 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 库

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-11-29发表,共计2538字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)