WPF中MVVM工具包 CommunityToolkit.Mvvm

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

特点

  • 独立于平台和运行时支持.NET Standard 2.0、.NET Standard 2.1 和 .NET 6,与UI框架无关,可在UWP、WinForms、WPF、Xamarin、Uno等平台上使用。
  • 易于选取和使用:对应用程序结构或编码范例没有严格需求,可以灵活使用。
  • 按需取用:自由选择要使用的组件,所有类型都是松散耦合的。
  • 引用实现:为基类库中包含的接口提供实现,但缺少直接使用它们所需的具体类型。

用法

  1. 安装 :在Visual Studio中,通过NuGet包管理器搜索并安装CommunityToolkit.Mvvm包,
  2. 引用 :在项目中添加using CommunityToolkit.Mvvm;来使用新API。
  3. 实现MVVM :通过继承ObservableObject来创建ViewModel,利用SetProperty方法实现属性变更通知,以及使用RelayCommandAsyncRelayCommand来实现命令模式。

功能

该库提供了一些基础类和接口的实现,主要包括:

  • ObservableObjectObservableRecipient :这些类实现了INotifyPropertyChanged接口,并提供了SetProperty方法,可以在属性值改变时触发PropertyChanged事件,简化数据绑定。
  • ICommand 接口的实现,如RelayCommandAsyncRelayCommand:这些类可以帮助创建命令,命令是MVVM模式中的一个重要组成部分。
  • IMessenger 和相关消息传递机制,如WeakReferenceMessengerStrongReferenceMessenger,用于组件间的松散耦合通信。

CommunityToolkit.Mvvm 包含的类型主要分为以下几个部分:

CommunityToolkit.Mvvm.ComponentModel
  • ObservableObject:实现了 INotifyPropertyChanged 接口,用于创建响应属性变化的ViewModel。
  • ObservableRecipient:用于消息传递的基类。
  • ObservableValidator:用于数据验证的基类。
CommunityToolkit.Mvvm.DependencyInjection
  • Ioc:提供依赖注入的容器和相关服务。
CommunityToolkit.Mvvm.Input
  • RelayCommand:一个简单的命令实现,用于执行无参方法。
  • RelayCommand<T>:一个泛型版本的 RelayCommand,用于执行带参方法。
  • AsyncRelayCommand:一个异步命令实现,用于执行异步无参方法。
  • AsyncRelayCommand<T>:一个异步命令实现,用于执行异步带参方法。
  • IRelayCommandRelayCommand 的接口定义。
  • IRelayCommand<T>RelayCommand<T> 的接口定义。
  • IAsyncRelayCommandAsyncRelayCommand 的接口定义。
  • IAsyncRelayCommand<T>AsyncRelayCommand<T> 的接口定义。
CommunityToolkit.Mvvm.Messaging
  • IMessenger:消息传递接口,定义了消息发送和订阅的方法。
  • WeakReferenceMessenger:一个使用弱引用的消息传递类,用于避免内存泄漏。
  • StrongReferenceMessenger:一个使用强引用的消息传递类。
  • IRecipient<TMessage>:消息接收者接口,用于接收特定类型的消息。
  • MessageHandler<TRecipient, TMessage>:消息处理程序,用于处理特定类型的消息。
CommunityToolkit.Mvvm.Messaging.Messages
  • PropertyChangedMessage<T>:用于属性变化的消息。
  • RequestMessage<T>:用于请求特定类型响应的消息。
  • AsyncRequestMessage<T>:异步版本的 RequestMessage<T>
  • CollectionRequestMessage<T>:用于集合操作的请求消息。
  • AsyncCollectionRequestMessage<T>:异步版本的 CollectionRequestMessage<T>
  • ValueChangedMessage<T>:用于值变化的消息。

CommunityToolkit.Mvvm 还提供了一些关键属性和功能

ObservableObject
  • ObservableObjectCommunityToolkit.Mvvm 库中的一个基础类,它实现了 INotifyPropertyChanged 接口。这个接口是 .NET 数据绑定基础架构的一部分,当对象的一个属性改变时,它会通知绑定到该属性的任何元素。

  • 用法 :ViewModel 通常会继承自 ObservableObject 类。

  • 示例代码

    cs 复制代码
    public class MyViewModel : ObservableObject
    {
        private string _myProperty;
        public string MyProperty
        {
            get => _myProperty;
            set => SetProperty(ref _myProperty, value);
        }
    }
[ObservableProperty] 属性
  • [ObservableProperty] 是一个特性(Attribute),用于自动生成可观察属性的 getter 和 setter,这些属性会在值改变时触发 PropertyChanged 事件。

  • 用法 :直接在 ViewModel 的属性上使用 [ObservableProperty] 特性。

  • 示例代码

    cs 复制代码
    public partial class MyViewModel : ObservableObject
    {
        [ObservableProperty]
        private string? _name;
    }

    这将生成一个类似下面的可观察属性:

    cs 复制代码
    public string? Name
    {
        get => _name;
        set => SetProperty(ref _name, value);
    }
[RelayCommand] 属性
  • [RelayCommand] 是一个特性,用于创建命令。命令是 MVVM 模式中的一个重要组成部分,用于将 View 的行为(如按钮点击)绑定到 ViewModel 中的方法。

  • 用法 :在 ViewModel 中的方法上使用 [RelayCommand] 特性。

  • 示例代码

    cs 复制代码
    public partial class MyViewModel : ObservableObject
    {
        [RelayCommand]
        private void ExecuteCommand()
        {
            // Command execution logic here
        }
    }

    这将生成一个 ICommand 实现,可以被 View 绑定。

其他属性
  1. RelayCommandAsyncRelayCommand

    • 这些类实现了 ICommand 接口,用于创建命令,是 MVVM 模式中命令模式的实现。
  2. IMessenger

    • 消息传递接口,用于在不同的 ViewModel 或 View 之间传递消息,实现组件间的松散耦合通信。
  3. PropertyChangedMessage<T>

    • 用于属性变化的消息,是 IMessenger 接口实现中用于传递属性变更通知的一种消息类型。
  4. RequestMessage<T>AsyncRequestMessage<T>

    • 用于请求特定类型响应的消息,其中 AsyncRequestMessage<T> 是异步版本的请求消息。
  5. CollectionRequestMessage<T>AsyncCollectionRequestMessage<T>

    • 用于集合操作的请求消息,其中 AsyncCollectionRequestMessage<T> 是异步版本的集合请求消息。
  6. ValueChangedMessage<T>

    • 用于值变化的消息,是 IMessenger 接口实现中用于传递值变更通知的一种消息类型。

CommunityToolkit.Mvvm 的框架类

CommunityToolkit.Mvvm.ComponentModel
  • ObservableObject:实现了 INotifyPropertyChangedINotifyPropertyChanging 接口,用于创建响应属性变化的 ViewModel。
  • ObservableRecipient:用于消息传递的基类。
  • ObservableValidator:用于数据验证的基类。
CommunityToolkit.Mvvm.DependencyInjection
  • Ioc:提供依赖注入的容器和相关服务。
CommunityToolkit.Mvvm.Input
  • RelayCommand:一个简单的命令实现,用于执行无参方法。
  • RelayCommand<T>:一个泛型版本的 RelayCommand,用于执行带参方法。
  • AsyncRelayCommand:一个异步命令实现,用于执行异步无参方法。
  • AsyncRelayCommand<T>:一个异步命令实现,用于执行异步带参方法。
  • IRelayCommandRelayCommand 的接口定义。
  • IRelayCommand<T>RelayCommand<T> 的接口定义。
  • IAsyncRelayCommandAsyncRelayCommand 的接口定义。
  • IAsyncRelayCommand<T>AsyncRelayCommand<T> 的接口定义。
CommunityToolkit.Mvvm.Messaging
  • IMessenger:消息传递接口,定义了消息发送和订阅的方法。
  • WeakReferenceMessenger:一个使用弱引用的消息传递类,用于避免内存泄漏。
  • StrongReferenceMessenger:一个使用强引用的消息传递类。
  • IRecipient<TMessage>:消息接收者接口,用于接收特定类型的消息。
  • MessageHandler<TRecipient, TMessage>:消息处理程序,用于处理特定类型的消息。
CommunityToolkit.Mvvm.Messaging.Messages
  • PropertyChangedMessage<T>:用于属性变化的消息。
  • RequestMessage<T>:用于请求特定类型响应的消息。
  • AsyncRequestMessage<T>:异步版本的 RequestMessage<T>
  • CollectionRequestMessage<T>:用于集合操作的请求消息。
  • AsyncCollectionRequestMessage<T>:异步版本的 CollectionRequestMessage<T>
  • ValueChangedMessage<T>:用于值变化的消息。

CommunityToolkit.Mvvm是一个现代、快速和模块化的MVVM库,它提供了尽可能大的灵活性,让开发人员可以自由选择要使用的组件,以最符合需求的方式组合这些生成块。

相关推荐
zzyzxb3 小时前
WPF 中隧道事件和冒泡事件
wpf
闲人编程4 小时前
API限流、鉴权与监控
分布式·python·wpf·限流·集群·令牌·codecapsule
TA远方5 小时前
【WPF】桌面程序使用谷歌浏览器内核CefSharp控件详解
wpf·浏览器·chromium·控件·cefsharp·cefsharp.wpf
Macbethad16 小时前
工业设备数据采集主站程序技术方案
wpf
关关长语1 天前
HandyControl 3.5.x 版本 ListViewItem不显示问题
windows·wpf
Macbethad1 天前
工业设备维护程序技术方案
wpf
Macbethad1 天前
工业设备配方管理系统技术方案
wpf
喵叔哟1 天前
7.日志系统深入
wpf
清风徐来Groot1 天前
WPF布局之Grid
wpf
清风徐来Groot1 天前
WPF布局之WrapPanel
wpf