首頁  >  文章  >  後端開發  >  MVVM C#

MVVM C#

王林
王林原創
2024-09-03 15:19:29583瀏覽

MVVM(模型-視圖-視圖模型)C# 是一種產生控制 WPF 平台核心功能的客戶端應用程式的技術,可輕鬆對應用程式功能進行單元測試。 MVVM(模型-視圖-視圖模型)是一種架構模式,表示三個不同的元件。它是一種軟體設計模式,用於分離使用者介面控制項和程式邏輯。

什麼是 MVVM C#​​?

MVVM(模型-視圖-視圖模型)是一種軟體設計模式,象徵三個獨立的元件:模型、視圖和視圖模型。

要了解這三個組件,讓我們看看它們如何協同工作,如下所示:

  • 模型:模型層是包含業務邏輯的層,它從資料來源獲取並保存詳細資訊以供 ViewModel 使用。
  • ViewModel:視圖層是模型和視圖之間的中間層,它不會將模型中的原始資訊轉換為視圖適合可見的結構。讓我們看一個轉換範例,例如從模型到視圖的 true 或 false 字串的布林標誌。
  • 視圖:它是代表軟體介面的層,如圖形使用者介面(GUI)。它將向客戶端顯示來自 ViewModel 的信息,並將詳細信息的變更傳回給 ViewModel。

如何使用 MVVM C#​​?

模型-視圖-視圖模型(MVVM)的使用是一種將使用者介面控制項和程式邏輯分開的架構軟體設計模式。它也稱為 Model-View-Binder,由 Microsoft 架構師開發。

MVVM C#

這三個組件作為一個團隊透過以下模式相互引用,如下所示:

  • View指出ViewModel
  • ViewModel 指出 Model

最重要的是 ViewModel 和 View 能夠透過兩種稱為資料綁定的方法進行通訊。通訊的最重要元件是名為 INotifyPropertyChanged 的​​介面。

要使用此方法,View 必須透過客戶端輸入一直更改 ViewModel 中的信息,且 ViewModel 必須使用透過 Model 中的流程更新的資訊來更新 View,或更新 View來自儲存庫的資訊。 MVVM(模型視圖視圖模型)架構高度重視每一層的關注點分離。透過分層,還有更多好處。讓我們看看以下內容。

  • 模組化:模組化支援在層內部實作期間對其進行更改或交換,而不會幹擾其他人。
  • 增加可測試性:其中每個元件都必須透過帶有虛假資訊的單元測試進行測試,而如果 ViewModel 程式寫在 View 的 Code-Behind 中,這是不可能的。

範例中的 MVVM C#​​ ViewModel

讓我們來看看ViewModel的職責如下:

  • ViewModel是MVVM(Model-View-ViewModel)應用中不可或缺的東西。 ViewModel最重要的任務就是將資訊呈現給View,以便View將需要的資料放置在螢幕上。
  • ViewModel 使用戶能夠處理資訊並修改資料。
  • ViewModel封裝了視圖的關係邏輯,但並不表示應用程式的邏輯需要進入ViewModel。
  • ViewModel 處理適當的一系列調用,以根據客戶端和視圖上的任何更改構建要發生的準確項目。
  • ViewModel 管理導航邏輯,例如選擇何時導航各種視圖。

建立新的 WPF 應用程式專案以更好地理解 ViewModel。

MVVM C#

接下來為 Model、View 和 ViewModel 建立三個資料夾,並刪除現有的 ManiWindow.xaml,只重新開始。

MVVM C#

接下來,建立新項目以及每個對應於單獨組件的項目。

  • 先點擊右側的「模型資料夾」以包含「類別」項目並將其命名為 HelloWorldModel.cs。
  • 接下來,右鍵點擊 ViewModel 資料夾,包含 Class 項目,並將其命名為 HelloWorldViewModel.cs。
  • 接下來,右鍵單擊“視圖資料夾”,包含 WPF(視窗)項目,並將其命名為 HellowWorldView.xaml。

MVVM C#

在視圖檔案中,修改 App.xaml 以指向新視圖,如下所示。

代碼:

MVVM C#

ViewModel:

在 ViewModel 中,首先從建置 ViewModel 開始,該類別應包含名為 INotifyPropertyChanged 的​​接口,以聲明 PropertyChangedEventHandler 事件並建立引發該事件的方法。接下來,聲明欄位和相關屬性並確保呼叫屬性中的OnPropertyChanged()方法作為設定存取權限。讓我們以程式設計方式查看範例,其中建構函數用於顯示模型並向 ViewModel 提供資料。

代碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using MyMVVMProject.Model;
namespace MyMVVMProject.ViewModel
 {
 // the interface INotifyPropertyChanged implements for supporting the binding purpose
 public class HelloWorldViewModel : INotifyPropertyChanged
  {
  private string _helloString;
  public event PropertyChangedEventHandler PropertyChanged;
  public string HelloString
  {
   get
   {
    return _helloString;
   }
  set
  {
   helloString = value;
   OnPropertyChanged();
 }
}
/// <summary>
/// when the Property modifies it Raises OnPropertychangedEvent
/// </summary>
/// <param name="name">Property name represented by String</param>
protected void OnPropertyChanged([CallerMemberName] string name = null)
{
 PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
public HelloWorldViewModel()
  {
   HelloWorldModel hwModel1 = new HelloWorldModel();
   _helloString = hwModel1.ImportantInfo;
  }
 }
}

型號:

然後是Model的創建,它透過從儲存庫中拖曳資料來為ViewModel提供數據,並且會返回到儲存庫中進行儲存。這裡用 GetInfo () 方法解釋該程序,該方法傳回簡單列表 。而業務邏輯也應用在這裡,就會有 ConcatenateData() 方法。這用於從清單 建立訊息「Hello World」。從存儲庫返回。

代碼:

private List<string> GetInfo ()
 {
  repositoryData = new List<string>()
  {
   "Hello",
   "world"
 };
 return repositoryData;
}

讓我們來看看下面的程式碼:

代碼:

MVVM C#

查看:

最後,我們需要建立一個View;它沒什麼,但必須在 XAML 中包含一些程式碼;該視窗需要對 ViewModel 命名空間的參考。然後將其映射到 XAML。最主要的是確保綁定ViewModel的屬性,它顯示標籤內容。

代碼:

MVVM C#

結論

在本文中,我們看到 MVVM C#​​ 有助於設計人員和開發人員以最少的技術複雜性進行協作。

以上是MVVM C#的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:C# 職業生涯下一篇:C# 職業生涯