最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

WPF中MVVM工具包CommunityToolkit.Mvvm的使用方式

 更新時(shí)間:2025年05月14日 09:16:38   作者:月落.  
這篇文章主要介紹了WPF中MVVM工具包CommunityToolkit.Mvvm的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

WPF中MVVM工具包CommunityToolkit.Mvvm

CommunityToolkit.Mvvm,也稱(chēng)為MVVM工具包,是Microsoft Community Toolkit的一部分。它是一個(gè)輕量級(jí)但功能強(qiáng)大的MVVM(Model-View-ViewModel)庫(kù),旨在幫助開(kāi)發(fā)者更容易地實(shí)現(xiàn)MVVM設(shè)計(jì)模式。

特點(diǎn)

  • 獨(dú)立于平臺(tái)和運(yùn)行時(shí):支持.NET Standard 2.0、.NET Standard 2.1 和 .NET 6,與UI框架無(wú)關(guān),可在UWP、WinForms、WPF、Xamarin、Uno等平臺(tái)上使用。
  • 易于選取和使用:對(duì)應(yīng)用程序結(jié)構(gòu)或編碼范例沒(méi)有嚴(yán)格需求,可以靈活使用。
  • 按需取用:自由選擇要使用的組件,所有類(lèi)型都是松散耦合的。
  • 引用實(shí)現(xiàn):為基類(lèi)庫(kù)中包含的接口提供實(shí)現(xiàn),但缺少直接使用它們所需的具體類(lèi)型。

用法

  • 安裝:在Visual Studio中,通過(guò)NuGet包管理器搜索并安裝CommunityToolkit.Mvvm包,
  • 引用:在項(xiàng)目中添加using CommunityToolkit.Mvvm;來(lái)使用新API。
  • 實(shí)現(xiàn)MVVM:通過(guò)繼承ObservableObject來(lái)創(chuàng)建ViewModel,利用SetProperty方法實(shí)現(xiàn)屬性變更通知,以及使用RelayCommandAsyncRelayCommand來(lái)實(shí)現(xiàn)命令模式。

功能

該庫(kù)提供了一些基礎(chǔ)類(lèi)和接口的實(shí)現(xiàn),主要包括:

  • ObservableObjectObservableRecipient:這些類(lèi)實(shí)現(xiàn)了INotifyPropertyChanged接口,并提供了SetProperty方法,可以在屬性值改變時(shí)觸發(fā)PropertyChanged事件,簡(jiǎn)化數(shù)據(jù)綁定。
  • ICommand接口的實(shí)現(xiàn),如RelayCommandAsyncRelayCommand:這些類(lèi)可以幫助創(chuàng)建命令,命令是MVVM模式中的一個(gè)重要組成部分。
  • IMessenger和相關(guān)消息傳遞機(jī)制,如WeakReferenceMessengerStrongReferenceMessenger,用于組件間的松散耦合通信。

CommunityToolkit.Mvvm 包含的類(lèi)型主要分為以下幾個(gè)部分

CommunityToolkit.Mvvm.ComponentModel

  • ObservableObject:實(shí)現(xiàn)了 INotifyPropertyChanged 接口,用于創(chuàng)建響應(yīng)屬性變化的ViewModel。
  • ObservableRecipient:用于消息傳遞的基類(lèi)。
  • ObservableValidator:用于數(shù)據(jù)驗(yàn)證的基類(lèi)。

CommunityToolkit.Mvvm.DependencyInjection

  • Ioc:提供依賴(lài)注入的容器和相關(guān)服務(wù)。

CommunityToolkit.Mvvm.Input

  • RelayCommand:一個(gè)簡(jiǎn)單的命令實(shí)現(xiàn),用于執(zhí)行無(wú)參方法。
  • RelayCommand<T>:一個(gè)泛型版本的 RelayCommand,用于執(zhí)行帶參方法。
  • AsyncRelayCommand:一個(gè)異步命令實(shí)現(xiàn),用于執(zhí)行異步無(wú)參方法。
  • AsyncRelayCommand<T>:一個(gè)異步命令實(shí)現(xiàn),用于執(zhí)行異步帶參方法。
  • IRelayCommandRelayCommand 的接口定義。
  • IRelayCommand<T>RelayCommand<T> 的接口定義。
  • IAsyncRelayCommandAsyncRelayCommand 的接口定義。
  • IAsyncRelayCommand<T>AsyncRelayCommand<T> 的接口定義。

CommunityToolkit.Mvvm.Messaging

  • IMessenger:消息傳遞接口,定義了消息發(fā)送和訂閱的方法。
  • WeakReferenceMessenger:一個(gè)使用弱引用的消息傳遞類(lèi),用于避免內(nèi)存泄漏。
  • StrongReferenceMessenger:一個(gè)使用強(qiáng)引用的消息傳遞類(lèi)。
  • IRecipient<TMessage>:消息接收者接口,用于接收特定類(lèi)型的消息。
  • MessageHandler<TRecipient, TMessage>:消息處理程序,用于處理特定類(lèi)型的消息。

CommunityToolkit.Mvvm.Messaging.Messages

  • PropertyChangedMessage<T>:用于屬性變化的消息。
  • RequestMessage<T>:用于請(qǐng)求特定類(lèi)型響應(yīng)的消息。
  • AsyncRequestMessage<T>:異步版本的 RequestMessage<T>。
  • CollectionRequestMessage<T>:用于集合操作的請(qǐng)求消息。
  • AsyncCollectionRequestMessage<T>:異步版本的 CollectionRequestMessage<T>。
  • ValueChangedMessage<T>:用于值變化的消息。

CommunityToolkit.Mvvm 還提供了一些關(guān)鍵屬性和功能

ObservableObject

ObservableObjectCommunityToolkit.Mvvm 庫(kù)中的一個(gè)基礎(chǔ)類(lèi),它實(shí)現(xiàn)了 INotifyPropertyChanged 接口。這個(gè)接口是 .NET 數(shù)據(jù)綁定基礎(chǔ)架構(gòu)的一部分,當(dāng)對(duì)象的一個(gè)屬性改變時(shí),它會(huì)通知綁定到該屬性的任何元素。

  • 用法:ViewModel 通常會(huì)繼承自 ObservableObject 類(lèi)。
  • 示例代碼
public class MyViewModel : ObservableObject
{
    private string _myProperty;
    public string MyProperty
    {
        get => _myProperty;
        set => SetProperty(ref _myProperty, value);
    }
}

[ObservableProperty] 屬性

[ObservableProperty] 是一個(gè)特性(Attribute),用于自動(dòng)生成可觀察屬性的 getter 和 setter,這些屬性會(huì)在值改變時(shí)觸發(fā) PropertyChanged 事件。

  • 用法:直接在 ViewModel 的屬性上使用 [ObservableProperty] 特性。
  • 示例代碼
public partial class MyViewModel : ObservableObject
{
    [ObservableProperty]
    private string? _name;
}

這將生成一個(gè)類(lèi)似下面的可觀察屬性:

public string? Name
{
    get => _name;
    set => SetProperty(ref _name, value);
}

[RelayCommand] 屬性

[RelayCommand] 是一個(gè)特性,用于創(chuàng)建命令。命令是 MVVM 模式中的一個(gè)重要組成部分,用于將 View 的行為(如按鈕點(diǎn)擊)綁定到 ViewModel 中的方法。

  • 用法:在 ViewModel 中的方法上使用 [RelayCommand] 特性。
  • 示例代碼
public partial class MyViewModel : ObservableObject
{
    [RelayCommand]
    private void ExecuteCommand()
    {
        // Command execution logic here
    }
}

這將生成一個(gè) ICommand 實(shí)現(xiàn),可以被 View 綁定。

其他屬性

RelayCommandAsyncRelayCommand

這些類(lèi)實(shí)現(xiàn)了 ICommand 接口,用于創(chuàng)建命令,是 MVVM 模式中命令模式的實(shí)現(xiàn)。

IMessenger

消息傳遞接口,用于在不同的 ViewModel 或 View 之間傳遞消息,實(shí)現(xiàn)組件間的松散耦合通信。

PropertyChangedMessage<T>

用于屬性變化的消息,是 IMessenger 接口實(shí)現(xiàn)中用于傳遞屬性變更通知的一種消息類(lèi)型。

RequestMessage<T>AsyncRequestMessage<T>

用于請(qǐng)求特定類(lèi)型響應(yīng)的消息,其中 AsyncRequestMessage<T> 是異步版本的請(qǐng)求消息。

CollectionRequestMessage<T>AsyncCollectionRequestMessage<T>

用于集合操作的請(qǐng)求消息,其中 AsyncCollectionRequestMessage<T> 是異步版本的集合請(qǐng)求消息。

ValueChangedMessage<T>

用于值變化的消息,是 IMessenger 接口實(shí)現(xiàn)中用于傳遞值變更通知的一種消息類(lèi)型。

CommunityToolkit.Mvvm 的框架類(lèi)

CommunityToolkit.Mvvm.ComponentModel

  • ObservableObject:實(shí)現(xiàn)了 INotifyPropertyChangedINotifyPropertyChanging 接口,用于創(chuàng)建響應(yīng)屬性變化的 ViewModel。
  • ObservableRecipient:用于消息傳遞的基類(lèi)。
  • ObservableValidator:用于數(shù)據(jù)驗(yàn)證的基類(lèi)。

CommunityToolkit.Mvvm.DependencyInjection

  • Ioc:提供依賴(lài)注入的容器和相關(guān)服務(wù)。

CommunityToolkit.Mvvm.Input

  • RelayCommand:一個(gè)簡(jiǎn)單的命令實(shí)現(xiàn),用于執(zhí)行無(wú)參方法。
  • RelayCommand<T>:一個(gè)泛型版本的 RelayCommand,用于執(zhí)行帶參方法。
  • AsyncRelayCommand:一個(gè)異步命令實(shí)現(xiàn),用于執(zhí)行異步無(wú)參方法。
  • AsyncRelayCommand<T>:一個(gè)異步命令實(shí)現(xiàn),用于執(zhí)行異步帶參方法。
  • IRelayCommandRelayCommand 的接口定義。
  • IRelayCommand<T>RelayCommand<T> 的接口定義。
  • IAsyncRelayCommandAsyncRelayCommand 的接口定義。
  • IAsyncRelayCommand<T>AsyncRelayCommand<T> 的接口定義。

CommunityToolkit.Mvvm.Messaging

  • IMessenger:消息傳遞接口,定義了消息發(fā)送和訂閱的方法。
  • WeakReferenceMessenger:一個(gè)使用弱引用的消息傳遞類(lèi),用于避免內(nèi)存泄漏。
  • StrongReferenceMessenger:一個(gè)使用強(qiáng)引用的消息傳遞類(lèi)。
  • IRecipient<TMessage>:消息接收者接口,用于接收特定類(lèi)型的消息。
  • MessageHandler<TRecipient, TMessage>:消息處理程序,用于處理特定類(lèi)型的消息。

CommunityToolkit.Mvvm.Messaging.Messages

  • PropertyChangedMessage<T>:用于屬性變化的消息。
  • RequestMessage<T>:用于請(qǐng)求特定類(lèi)型響應(yīng)的消息。
  • AsyncRequestMessage<T>:異步版本的 RequestMessage<T>。
  • CollectionRequestMessage<T>:用于集合操作的請(qǐng)求消息。
  • AsyncCollectionRequestMessage<T>:異步版本的 CollectionRequestMessage<T>
  • ValueChangedMessage<T>:用于值變化的消息。

CommunityToolkit.Mvvm是一個(gè)現(xiàn)代、快速和模塊化的MVVM庫(kù),它提供了盡可能大的靈活性,讓開(kāi)發(fā)人員可以自由選擇要使用的組件,以最符合需求的方式組合這些生成塊。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • winform導(dǎo)出dataviewgrid數(shù)據(jù)為excel的方法

    winform導(dǎo)出dataviewgrid數(shù)據(jù)為excel的方法

    這篇文章主要介紹了winform導(dǎo)出dataviewgrid數(shù)據(jù)為excel的方法,可實(shí)現(xiàn)將dataViewGrid視圖中的數(shù)據(jù)導(dǎo)出為excel格式的功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-01-01
  • C#實(shí)現(xiàn)FTP傳送文件的示例

    C#實(shí)現(xiàn)FTP傳送文件的示例

    這篇文章主要介紹了C#實(shí)現(xiàn)FTP傳送文件的示例,幫助大家更好的理解和學(xué)習(xí)c#的使用,感興趣的朋友可以了解下
    2020-12-12
  • C#利用Spire.XLS?for?.NET實(shí)現(xiàn)合并或取消Excel單元格

    C#利用Spire.XLS?for?.NET實(shí)現(xiàn)合并或取消Excel單元格

    合并單元格是指將兩個(gè)或多個(gè)獨(dú)立的單元格合并為一個(gè)較大的單元格,常用于需要?jiǎng)?chuàng)建跨多列顯示的標(biāo)題或標(biāo)簽,下面我們來(lái)看看如何使用C#實(shí)現(xiàn)合并或取消合并Excel單元格吧
    2026-01-01
  • c#數(shù)據(jù)類(lèi)型基礎(chǔ)

    c#數(shù)據(jù)類(lèi)型基礎(chǔ)

    C#里面的數(shù)據(jù)類(lèi)型分為兩種:值類(lèi)型和引用類(lèi)型。
    2008-08-08
  • C#中DateTimePicker默認(rèn)值顯示為空的問(wèn)題

    C#中DateTimePicker默認(rèn)值顯示為空的問(wèn)題

    這篇文章主要介紹了C#中DateTimePicker默認(rèn)值顯示為空的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • C#控制臺(tái)應(yīng)用程序中輸出彩色字體

    C#控制臺(tái)應(yīng)用程序中輸出彩色字體

    這篇文章主要為大家詳細(xì)介紹了C#控制臺(tái)應(yīng)用程序中輸出彩色字體的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 使用C#在注冊(cè)表中保存信息的例子

    使用C#在注冊(cè)表中保存信息的例子

    最近做的項(xiàng)目需要在注冊(cè)表中記錄一些用戶(hù)設(shè)置,方便在程序下次啟動(dòng)時(shí)讀取設(shè)置,應(yīng)用上次用戶(hù)保存的設(shè)置,挺簡(jiǎn)單的
    2014-04-04
  • C#實(shí)現(xiàn)對(duì)字符串中特定詞出現(xiàn)次數(shù)的計(jì)數(shù)過(guò)程

    C#實(shí)現(xiàn)對(duì)字符串中特定詞出現(xiàn)次數(shù)的計(jì)數(shù)過(guò)程

    LINQ(Language-Integrated Query)是C#和VB.NET中強(qiáng)大的查詢(xún)語(yǔ)言,它可以用來(lái)查詢(xún)集合、SQL數(shù)據(jù)庫(kù)、XML文檔等,在C#中,我們可以使用LINQ來(lái)簡(jiǎn)化對(duì)字符串中特定單詞出現(xiàn)次數(shù)的計(jì)數(shù)過(guò)程,需要的朋友可以參考下
    2024-08-08
  • C#使用Tesseract進(jìn)行Ocr識(shí)別的方法實(shí)現(xiàn)

    C#使用Tesseract進(jìn)行Ocr識(shí)別的方法實(shí)現(xiàn)

    本文主要介紹了C#使用Tesseract進(jìn)行Ocr識(shí)別的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C#使用Linq to XML處理XML詳解

    C#使用Linq to XML處理XML詳解

    LINQ to XML是.NET Framework 3.5引入的一種XML編程API,本文將深入探討LINQ to XML的核心概念、常見(jiàn)操作及最佳實(shí)踐,需要的小伙伴可以了解下
    2025-07-07

最新評(píng)論

襄城县| 重庆市| 湾仔区| 新龙县| 宝应县| 波密县| 开原市| 泌阳县| 江都市| 阳朔县| 冕宁县| 巴楚县| 阿拉善右旗| 安宁市| 出国| 尉氏县| 凤山县| 土默特右旗| 板桥市| 印江| 山阳县| 仪征市| 逊克县| 正宁县| 剑阁县| 江西省| 汪清县| 苍山县| 乌拉特中旗| 台东县| 岳阳市| 巢湖市| 鹿泉市| 岳阳县| 略阳县| 通城县| 呼图壁县| 宝鸡市| 永康市| 措美县| 三门峡市|