国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

淺談WPF之MVVM工具包

這篇具有很好參考價值的文章主要介紹了淺談WPF之MVVM工具包。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在之前的WPF示例中,都會用到一個MVVM框,也是一個比較常的MVVM框架,就是MVVM工具包【CommunityToolkit.Mvvm】,今天專門以一個簡單的小例子,簡述一下MVVM工具包的常見用法,僅供學習分享使用,如有不足之處,還請指正。

淺談WPF之MVVM工具包

?

什么是MVVM工具包?

?

CommunityToolkit.Mvvm 包(又名 MVVM 工具包)是一個現(xiàn)代、快速和模塊化的 MVVM 庫。 MVVM工具包是 .NET 社區(qū)工具包的一部分,圍繞以下原則生成:

  • 獨立于平臺和運行時?- .NET Standard 2.0、.NET Standard 2.1?和 .NET 6??(與 UI 框架無關)
  • 易于選取和使用?- 對應用程序結構或編碼范例(“MVVM”之外)沒有嚴格的要求,也就是可以靈活使用。
  • 按需取用?- 自由選擇要使用的組件。
  • 引用實現(xiàn)?- 精簡且高效,為基類庫中包含的接口提供實現(xiàn),但缺少直接使用它們所需的具體類型。

MVVM 工具包由 Microsoft 維護和發(fā)布,是 .NET Foundation 的一部分。

?

安裝MVVM工具包

?

在Visual Studio 開發(fā)工具中,可以通過NuGet包管理器進行安裝。點擊項目右鍵,選擇“管理NuGet程序包”,打開NuGet管理窗口,然后搜索“CommunityToolkit.Mvvm”,進行安裝即可,目前最新版本為8.2.2 。如下所示:

淺談WPF之MVVM工具包

?

可觀測對象ObservableObject

?

可觀測對象ObservableObject,實現(xiàn)了?INotifyPropertyChanged?和?INotifyPropertyChanging 接口,是MVVM工具包實現(xiàn)的可觀測對象的基類。如果某些類中的屬性需要具備變更通知功能,則可能繼承此類,如ViewModel或者Model等。主要分兩個步驟:

1. 模型類繼承ObservableObject,即擁有了基類具有的方法和屬性。

2. 將傳統(tǒng)屬性的set方法中字段=value,修改為SetProperty(ref 字段名,value)。

以Student為例,如下所示:

using CommunityToolkit.Mvvm.ComponentModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DemoMVVM.Models
{
    public class Student:ObservableObject
    {
        private int id;

        public int Id
        {
            get { return id; }
            set {SetProperty(ref id , value); }
        }


        private string name;

        public string Name
        {
            get { return name; }
            set { SetProperty(ref name , value); }
        }

    }
}

?

命令RelayCommand

?

RelayCommand是ICommand的實現(xiàn),可以向ViewModel中的方法公開委托,從而可以包裝標準的方法或者Lamada表達式。如下所示:

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using DemoMVVM.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;

namespace DemoMVVM.ViewModels
{
    public class MainWindowViewModel:ObservableObject
    {
        private Student student;

        public Student Student
        {
            get { return student; }
            set { student = value; }
        }

        public MainWindowViewModel()
        {
            student = new Student();
        }

        private ICommand saveCommand;

        public ICommand SaveCommand=>saveCommand??=new RelayCommand(Save);

        private void Save()
        {
            MessageBox.Show($"需要保存的信息為Id={Student.Id},Name={Student.Name}!");
        }
    }
}

?

控制反轉Ioc

?

使用MVVM模式進行開發(fā),最重要的目的是為了解耦,其中常見的方式就是通過依賴注入的方式實現(xiàn)控制反轉,進而實現(xiàn)解耦。目前來說,MVVM工具包并未實現(xiàn)此功能,因為已經有專門的API來實現(xiàn),如:Microsoft.Extensions.DependencyInjection。

首先安裝依賴注入的庫【Microsoft.Extensions.DependencyInjection】,當前最新,通過NuGet包管理器進行安裝,如下所示:

淺談WPF之MVVM工具包

在App啟動程序中,創(chuàng)建IServiceProvider對像,并初始化注入ViewModel,如下所示:

using DemoMVVM.ViewModels;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;

namespace DemoMVVM
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        public IServiceProvider ServiceProvider { get; private set; }

        public new static App Current => (App)Application.Current;

        public App()
        {
            ServiceProvider=ConfigurationServices();
        }


        private static IServiceProvider ConfigurationServices()
        {
            var services = new ServiceCollection();

            services.AddTransient<MainWindowViewModel>();

            return services.BuildServiceProvider();
        }
    }
}

在視圖類中,進行獲取對應的服務即可,如下所示:

using DemoMVVM.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace DemoMVVM
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = App.Current.ServiceProvider.GetService(typeof(MainWindowViewModel));
        }
    }
}

以上就實現(xiàn)了控制反轉,將對象的創(chuàng)建與釋放,交到容器去處理,而不是由視圖去做。

?

視圖數據綁定

?

因為視圖的DataContext和ViewModel對象是同一個,所以在UI視圖中,只需要對控件進行數據綁定即可,如下所示:

<Window x:Class="DemoMVVM.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:DemoMVVM"
        mc:Ignorable="d"
        Title="MainWindow" Height="300" Width="400">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="0.6*"></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <TextBlock Text="編號" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="10"></TextBlock>
        <TextBox Text="{Binding Student.Id}" Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Center" Width="130" Height="35" Margin="10" VerticalContentAlignment="Center"></TextBox>
        <TextBlock Text="姓名" Grid.Column="0" Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="10"></TextBlock>
        <TextBox Text="{Binding Student.Name}" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Center" Width="130" Height="35" Margin="10" VerticalContentAlignment="Center"></TextBox>
        <Button Content="保存" Command="{Binding SaveCommand}"  Grid.Row="2" Grid.ColumnSpan="2" HorizontalAlignment="Center" Height="30" Width="120"></Button>
    </Grid>
</Window>

?

示例演示

?

經過上述步驟,就實現(xiàn)了MVVM模式的數據綁定和命令調用,如下所示

?淺談WPF之MVVM工具包

?

參考文檔

?

在本實例中,只是簡單介紹了MVVM工具包的使用,如若想具體了解更詳細內容,可參考官方文檔,

1. MVVM工具包:https://learn.microsoft.com/zh-cn/dotnet/communitytoolkit/mvvm/

2. 依賴注入:https://learn.microsoft.com/zh-cn/dotnet/core/extensions/dependency-injection

?

以上就是【淺談WPF之MVVM工具包】的全部內容,旨在拋磚引玉,一起學習,共同進步。文章來源地址http://www.zghlxwxcb.cn/news/detail-843143.html

到了這里,關于淺談WPF之MVVM工具包的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • GIS工具包

    GIS工具包,根據jts工具,結合實際使用場景提取出來的常用工具集合;涵蓋幾何格式轉換(WKT,GeoJSON等)與geometry轉換、gis距離計算、度距離單位換算、角度計算、buffer運算、映射截取、幾何穿串等操作 gis-tools源碼庫地址 1.1 WktTool使用說明 wkt格式與geometry互轉; wkt轉geometry操作

    2024年02月06日
    瀏覽(123)
  • 學習筆記-JVM-工具包(JVM分析工具)

    學習筆記-JVM-工具包(JVM分析工具)

    常用工具 JDK工具 ① jps: JVM Process status tool:JVM進程狀態(tài)工具,查看進程基本信息 ② jstat: JVM statistics monitoring tool : JVM統(tǒng)計監(jiān)控工具,查看堆,GC詳細信息 ③ jinfo:Java Configuration Info :查看配置參數信息,支持部分參數運行時修改 ④ jmap:Java Memory Map :分析堆內存工具,du

    2024年02月13日
    瀏覽(27)
  • MATLAB添加工具包(詳細)

    MATLAB添加工具包(詳細)

    我這里要添加的文件包為:DeepLearnToolbox-master 我這里的安裝目錄是:D:softwareMATLABtoolbox (1)以中文版為例,在主界面找到“設置路徑”按鈕 (2)點擊“設置路徑”,彈出設置界面 第一步:點“添加文件夾” (注:如果要工具包中有多個子文件夾,則點“添加并包含子文

    2024年02月02日
    瀏覽(21)
  • 【Linux】基本開發(fā)工具包使用

    【Linux】基本開發(fā)工具包使用

    目錄 一, yum ——linux軟件包管理器 ?1. 軟件包是啥子? ?2.? yum基本使用? 1. 步驟:? 2. 開發(fā)工具推薦(centos 7.6) 二,vim —— linux文本編輯器 1. Normal mode? ——? 命令模式(記不住沒關系,多練就行) 2.? last line? mode——? ?末行模式 (如何進入;shift :) 3.?Insert mode ——插

    2024年02月08日
    瀏覽(29)
  • Hardhat工具包1--安裝使用

    Hardhat工具包1--安裝使用

    參考資料: 官方文檔 : https://hardhat.org/getting-started/ https://hardhat.org/hardhat-runner/docs/getting-started#overview 基于Hardhat和Openzeppelin開發(fā)可升級合約(一) 基于Hardhat和Openzeppelin開發(fā)可升級合約(一)_灬倪先森_的博客-CSDN博客 ---------------------------------------------------------------------------------

    2023年04月11日
    瀏覽(25)
  • Windows11滲透工具包分享

    Windows11滲透工具包分享

    ? ? ? ? ? 項目地址 下載地址

    2024年02月13日
    瀏覽(20)
  • Quanto: PyTorch 量化工具包

    量化技術通過用低精度數據類型 (如 8 位整型 (int8)) 來表示深度學習模型的權重和激活,以減少傳統(tǒng)深度學習模型使用 32 位浮點 (float32) 表示權重和激活所帶來的計算和內存開銷。 減少位寬意味著模型的內存占用更低,這對在消費設備上部署大語言模型至關重要。量化技術也

    2024年04月10日
    瀏覽(31)
  • NetAssist網絡調試工具使用指南 (附NetAssist工具包)

    1、NetAssist簡介 NetAssist網絡調試助手,是Windows平臺下開發(fā)的TCP/IP網絡調試工具,集TCP/UDP服務端及客戶端于一體,是網絡應用開發(fā)及調試工作必備的專業(yè)工具之一,可以幫助網絡應用設計、開發(fā)、測試人員檢查所開發(fā)的網絡應用軟/硬件產品的數據收發(fā)狀況,提高開發(fā)速度,簡

    2024年02月16日
    瀏覽(22)
  • Kubernetes GoRoutineMap工具包代碼詳解

    GoRoutineMap 定義了一種類型,可以運行具有名稱的 goroutine 并跟蹤它們的狀態(tài)。它防止創(chuàng)建具有相同名稱的多個goroutine,并且在上一個具有該名稱的 goroutine 完成后的一段退避時間內可能阻止重新創(chuàng)建 goroutine。 使用GoRoutineMap場景: 使用協(xié)程的方式運行函數邏輯,如果函數成功

    2024年02月06日
    瀏覽(22)
  • 實踐學習PaddleScience飛槳科學工具包

    實踐學習PaddleScience飛槳科學工具包

    動手實踐,在實踐中學習!本項目可以在AIStudio平臺一鍵運行!地址:https://aistudio.baidu.com/projectdetail/4278591 本項目第一次執(zhí)行會報錯,再執(zhí)行一次即可。若碰到莫名其妙的報錯,換成32G顯存環(huán)境試試。 愛因斯坦和牛頓也是普通人,也有認識不到的地方,不要盲目崇拜,也不要

    2024年01月16日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包