抱歉,您的瀏覽器無法訪問本站
本頁面需要瀏覽器支持(啟用)JavaScript
了解詳情 >

在物件導向開發中,觀察者模式經常應用於模組化與封裝的設計中。它能讓物件以彈性的方式傳遞訊息,是實現鬆耦合的一種常見做法。

而在 C# 中,常用 eventAction/ FuncRX 等方式實作觀察者模式,看似達成了解耦。但實際上,訂閱者仍需知道事件來源,這造成一種隱性耦合,讓物件之間仍有依賴。

CommunityToolkit.Mvvm 套件中,除了提供 MVVM 架構下常用的 ObservableObjectObservableValidator 外,還支援基於中介者模式的訊息傳遞機制 Messenger

該機制讓訊息的發送者與觀察者無需彼此參照,只需註冊並透過 Messenger 發送訊息,就能由框架轉發給所有訂閱者。為了整合這套機制,套件也提供了 ObservableRecipient 類別,讓 ViewModel 更容易註冊與接收訊息。

這邊要注意的是,使用 Messenger 並不代表完全沒有耦合,而是將依賴轉向了中介物件 ( Messenger 本身),達成相對鬆耦合的設計。

本次將使用 WPF 並搭配 CommunityToolkit.Mvvm 套件的ObservableRecipient 物件與 Messenger 機制,實作訊息傳遞的示範。

C#

MVVM 是 WPF 應用程式開發中的核心架構,透過 資料綁定 (Binding) 和 命令模式 (Command),讓 View 和 ViewModel 解耦,提高可維護性。

在使用過程中,個人最初從最基本的 一對一 關係開始學習,隨著專案需求變得更複雜,也開始嘗試 一對多、多對多,甚至多對一 的組合方式。這些不同的組合變化,某種程度上也反應了自己在 MVVM 架構上的成長,因此想記錄下這四種組合,作為經驗的整理。

C#

ico 檔是 Windows 圖示的一種專用格式,能夠包含多種尺寸的圖片,方便系統根據不同情境自動選擇適合的圖示進行顯示。本次想記錄下使用 GIMP 軟體製作 ico 檔案,並將其應用於 WPF 應用程式中,整個過程並不困難,但因為不常用,時間久了可能會忘記,所以寫下來方便未來做個參考。

C#

當需要在 C# WPF 中產生 PDF 時,通常會使用各種功能強大的套件來實現。那代表著需要學習並掌握套件內的類別與方法,才能實現需要的排版。並且過程中還要確保將顯示的資料正確的放入到 PDF 中。 總想著,為什麼製作 PDF 不能像編寫 WPF XAML 一樣簡單呢? 這樣就不用學習其他套件了,而且還能透過 Data Binding 直接將資料綁訂到 UI 上。這樣一來,整個過程應該會很方...
C#

在軟體開發中,處理使用者輸入是一個常見的任務,同時也時常伴隨著數據驗證的需求。

在 WPF 或其他 Windows 平台的 MVVM 架構中,要完成數據驗證,可以選擇使用 ValidationRuleIDataErrorInfoINotifyDataErrorInfo 這幾個類別或接口。

其中 IDataErrorInfoINotifyDataErrorInfo 的部分為 interface ,不僅要進行實作以外,因 MVVM 架構也需要一併實作 INotifyPropertyChanged 。而在 ViewModel 實作上,綁定的屬性也需要撰寫許多涉及 Property 的程式碼,使的開發的過程稍嫌繁瑣。

本篇的主題, CommunityToolkit.Mvvm 套件提供了實作 MVVM 架構時所需要的物件,其中的一個部分便是關於數據驗證,其中提供的物件,不只實作了 INotifyDataErrorInfoINotifyPropertyChanged 等, MVVM 所需實現的interface外,同時也有提供方便的 Attribute 來簡化程式碼。

本次將進行該套件的數據驗證物件並使用 WPF 的示範。

C#

在WPF開發中(或其他Windows框架),若要實現MVVM架構的話,通常需要實作 INotifyPropertyChangedICommand,這兩個 interface 。自己先前的習慣是,從網路上找其他人寫好的實作,複製到自己的專案中使用,且每開一次新專案,就複製一份。

某天如往常地尋找資料時,發現了微軟在 Nuget 上的 CommunityToolkit.Mvvm 套件(也稱為MVVM工具包)。該套件不但實作了MVVM所需要的物件,還提供一些好用的 Attribute ,讓程式碼可以更精簡,從而讓開發人員更專注在重要的程式邏輯中。

關於 CommunityToolkit.Mvvm 套件使用方法,預計拆分成幾篇不同主題的文章,而本次將記錄,在未使用此套件之前的做法,接著套件的安裝方法、基本使用,以及如何使用其提供的 Attribute 功能。

C#



本站使用 Volantis 作為主題,總訪問量為