WPF中MVVM工具包CommunityToolkit.Mvvm的使用方式
WPF中MVVM工具包CommunityToolkit.Mvvm
CommunityToolkit.Mvvm,也稱為MVVM工具包,是Microsoft Community Toolkit的一部分。它是一個輕量級但功能強大的MVVM(Model-View-ViewModel)庫,旨在幫助開發(fā)者更容易地實現(xiàn)MVVM設(shè)計模式。
特點
- 獨立于平臺和運行時:支持.NET Standard 2.0、.NET Standard 2.1 和 .NET 6,與UI框架無關(guān),可在UWP、WinForms、WPF、Xamarin、Uno等平臺上使用。
- 易于選取和使用:對應(yīng)用程序結(jié)構(gòu)或編碼范例沒有嚴格需求,可以靈活使用。
- 按需取用:自由選擇要使用的組件,所有類型都是松散耦合的。
- 引用實現(xiàn):為基類庫中包含的接口提供實現(xiàn),但缺少直接使用它們所需的具體類型。
用法
- 安裝:在Visual Studio中,通過NuGet包管理器搜索并安裝
CommunityToolkit.Mvvm包, - 引用:在項目中添加
using CommunityToolkit.Mvvm;來使用新API。 - 實現(xiàn)MVVM:通過繼承
ObservableObject來創(chuàng)建ViewModel,利用SetProperty方法實現(xiàn)屬性變更通知,以及使用RelayCommand或AsyncRelayCommand來實現(xiàn)命令模式。
功能
該庫提供了一些基礎(chǔ)類和接口的實現(xiàn),主要包括:
- ObservableObject 和 ObservableRecipient:這些類實現(xiàn)了
INotifyPropertyChanged接口,并提供了SetProperty方法,可以在屬性值改變時觸發(fā)PropertyChanged事件,簡化數(shù)據(jù)綁定。 - ICommand接口的實現(xiàn),如RelayCommand和AsyncRelayCommand:這些類可以幫助創(chuàng)建命令,命令是MVVM模式中的一個重要組成部分。
- IMessenger和相關(guān)消息傳遞機制,如WeakReferenceMessenger和StrongReferenceMessenger,用于組件間的松散耦合通信。
CommunityToolkit.Mvvm 包含的類型主要分為以下幾個部分
CommunityToolkit.Mvvm.ComponentModel
ObservableObject:實現(xiàn)了INotifyPropertyChanged接口,用于創(chuàng)建響應(yīng)屬性變化的ViewModel。ObservableRecipient:用于消息傳遞的基類。ObservableValidator:用于數(shù)據(jù)驗證的基類。
CommunityToolkit.Mvvm.DependencyInjection
Ioc:提供依賴注入的容器和相關(guān)服務(wù)。
CommunityToolkit.Mvvm.Input
RelayCommand:一個簡單的命令實現(xiàn),用于執(zhí)行無參方法。RelayCommand<T>:一個泛型版本的RelayCommand,用于執(zhí)行帶參方法。AsyncRelayCommand:一個異步命令實現(xiàn),用于執(zhí)行異步無參方法。AsyncRelayCommand<T>:一個異步命令實現(xiàn),用于執(zhí)行異步帶參方法。IRelayCommand:RelayCommand的接口定義。IRelayCommand<T>:RelayCommand<T>的接口定義。IAsyncRelayCommand:AsyncRelayCommand的接口定義。IAsyncRelayCommand<T>:AsyncRelayCommand<T>的接口定義。
CommunityToolkit.Mvvm.Messaging
IMessenger:消息傳遞接口,定義了消息發(fā)送和訂閱的方法。WeakReferenceMessenger:一個使用弱引用的消息傳遞類,用于避免內(nèi)存泄漏。StrongReferenceMessenger:一個使用強引用的消息傳遞類。IRecipient<TMessage>:消息接收者接口,用于接收特定類型的消息。MessageHandler<TRecipient, TMessage>:消息處理程序,用于處理特定類型的消息。
CommunityToolkit.Mvvm.Messaging.Messages
PropertyChangedMessage<T>:用于屬性變化的消息。RequestMessage<T>:用于請求特定類型響應(yīng)的消息。AsyncRequestMessage<T>:異步版本的RequestMessage<T>。CollectionRequestMessage<T>:用于集合操作的請求消息。AsyncCollectionRequestMessage<T>:異步版本的CollectionRequestMessage<T>。ValueChangedMessage<T>:用于值變化的消息。
CommunityToolkit.Mvvm 還提供了一些關(guān)鍵屬性和功能
ObservableObject
ObservableObject 是 CommunityToolkit.Mvvm 庫中的一個基礎(chǔ)類,它實現(xiàn)了 INotifyPropertyChanged 接口。這個接口是 .NET 數(shù)據(jù)綁定基礎(chǔ)架構(gòu)的一部分,當對象的一個屬性改變時,它會通知綁定到該屬性的任何元素。
- 用法:ViewModel 通常會繼承自
ObservableObject類。 - 示例代碼:
public class MyViewModel : ObservableObject
{
private string _myProperty;
public string MyProperty
{
get => _myProperty;
set => SetProperty(ref _myProperty, value);
}
}[ObservableProperty] 屬性
[ObservableProperty] 是一個特性(Attribute),用于自動生成可觀察屬性的 getter 和 setter,這些屬性會在值改變時觸發(fā) PropertyChanged 事件。
- 用法:直接在 ViewModel 的屬性上使用
[ObservableProperty]特性。 - 示例代碼:
public partial class MyViewModel : ObservableObject
{
[ObservableProperty]
private string? _name;
}這將生成一個類似下面的可觀察屬性:
public string? Name
{
get => _name;
set => SetProperty(ref _name, value);
}[RelayCommand] 屬性
[RelayCommand] 是一個特性,用于創(chuàng)建命令。命令是 MVVM 模式中的一個重要組成部分,用于將 View 的行為(如按鈕點擊)綁定到 ViewModel 中的方法。
- 用法:在 ViewModel 中的方法上使用
[RelayCommand]特性。 - 示例代碼:
public partial class MyViewModel : ObservableObject
{
[RelayCommand]
private void ExecuteCommand()
{
// Command execution logic here
}
}這將生成一個 ICommand 實現(xiàn),可以被 View 綁定。
其他屬性
RelayCommand 和 AsyncRelayCommand:
這些類實現(xiàn)了 ICommand 接口,用于創(chuàng)建命令,是 MVVM 模式中命令模式的實現(xiàn)。
IMessenger:
消息傳遞接口,用于在不同的 ViewModel 或 View 之間傳遞消息,實現(xiàn)組件間的松散耦合通信。
PropertyChangedMessage<T>:
用于屬性變化的消息,是 IMessenger 接口實現(xiàn)中用于傳遞屬性變更通知的一種消息類型。
RequestMessage<T> 和 AsyncRequestMessage<T>:
用于請求特定類型響應(yīng)的消息,其中 AsyncRequestMessage<T> 是異步版本的請求消息。
CollectionRequestMessage<T> 和 AsyncCollectionRequestMessage<T>:
用于集合操作的請求消息,其中 AsyncCollectionRequestMessage<T> 是異步版本的集合請求消息。
ValueChangedMessage<T>:
用于值變化的消息,是 IMessenger 接口實現(xiàn)中用于傳遞值變更通知的一種消息類型。
CommunityToolkit.Mvvm 的框架類
CommunityToolkit.Mvvm.ComponentModel
ObservableObject:實現(xiàn)了INotifyPropertyChanged和INotifyPropertyChanging接口,用于創(chuàng)建響應(yīng)屬性變化的 ViewModel。ObservableRecipient:用于消息傳遞的基類。ObservableValidator:用于數(shù)據(jù)驗證的基類。
CommunityToolkit.Mvvm.DependencyInjection
Ioc:提供依賴注入的容器和相關(guān)服務(wù)。
CommunityToolkit.Mvvm.Input
RelayCommand:一個簡單的命令實現(xiàn),用于執(zhí)行無參方法。RelayCommand<T>:一個泛型版本的RelayCommand,用于執(zhí)行帶參方法。AsyncRelayCommand:一個異步命令實現(xiàn),用于執(zhí)行異步無參方法。AsyncRelayCommand<T>:一個異步命令實現(xiàn),用于執(zhí)行異步帶參方法。IRelayCommand:RelayCommand的接口定義。IRelayCommand<T>:RelayCommand<T>的接口定義。IAsyncRelayCommand:AsyncRelayCommand的接口定義。IAsyncRelayCommand<T>:AsyncRelayCommand<T>的接口定義。
CommunityToolkit.Mvvm.Messaging
IMessenger:消息傳遞接口,定義了消息發(fā)送和訂閱的方法。WeakReferenceMessenger:一個使用弱引用的消息傳遞類,用于避免內(nèi)存泄漏。StrongReferenceMessenger:一個使用強引用的消息傳遞類。IRecipient<TMessage>:消息接收者接口,用于接收特定類型的消息。MessageHandler<TRecipient, TMessage>:消息處理程序,用于處理特定類型的消息。
CommunityToolkit.Mvvm.Messaging.Messages
PropertyChangedMessage<T>:用于屬性變化的消息。RequestMessage<T>:用于請求特定類型響應(yīng)的消息。AsyncRequestMessage<T>:異步版本的RequestMessage<T>。CollectionRequestMessage<T>:用于集合操作的請求消息。AsyncCollectionRequestMessage<T>:異步版本的CollectionRequestMessage<T>。ValueChangedMessage<T>:用于值變化的消息。
CommunityToolkit.Mvvm是一個現(xiàn)代、快速和模塊化的MVVM庫,它提供了盡可能大的靈活性,讓開發(fā)人員可以自由選擇要使用的組件,以最符合需求的方式組合這些生成塊。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
RSA解決了對稱加密的一個不足,比如AES算法加密和解密時使用的是同一個秘鑰,因此這個秘鑰不能公開,因此對于需要公開秘鑰的場合,我們需要在加密和解密過程中使用不同的秘鑰,加密使用的公鑰可以公開,解密使用的私鑰要保密,這就是非對稱加密的好處?!?/div> 2021-06-06
C# 利用IRawPixels接口遍歷柵格數(shù)據(jù)
本文主要介紹了利用IRawPixels接口遍歷柵格數(shù)據(jù)。具有很好的參考價值,下面跟著小編一起來看下吧2017-02-02最新評論

