【學習筆記】WPF-01:前言

来源:https://www.cnblogs.com/yexiaozhi/archive/2022/06/14/16374534.html
-Advertisement-
Play Games

WPF(Windows Presentation Foundation)是微軟推出的基於Windows 的用戶界面框架,由 .NET Framework 3.0 開始引入,與WCF (Windows Communication Foundation)及 WF(Windows Workflow Fou... ...


前言

1.基本概念

WPF(Windows Presentation Foundation)是微軟推出的基於Windows 的用戶界面框架,由 .NET Framework 3.0 開始引入,與WCF (Windows Communication Foundation)及 WF(Windows Workflow Foundation)並行為新一代 Windows操作系統以及 WinFX 的三個重大應用程式開發類庫。

2.功能定位

三層架構

對於一般程式而言通常包含3層架構:數據層業務邏輯層表現層,這三層結構的功能大致如下:

數據層:
存儲數據。多由資料庫構成

業務邏輯層:
根據需求實現業務功能。通過一組Service向表現層公開功能,通過DAL(Data Access Layer)與數據層進行交互

表現層:
向用戶展示數據。通常被稱為客戶端程式

WPF的功能是用來編寫應用程式的表現層

擴展:業務邏輯層——WCFWF數據訪問層——WCF DataServiceWCF RIA Service

3.功能結構

MVVM模式

表示層程式一般包括以下四種功能性代碼

  • 數據模型:現實世界中事物和邏輯的抽象。

  • 業務邏輯:數據模型之間的關係與交互。

  • 用戶界面:由控制項構成的、與用戶進行交互的界面,用於把數據展示給用戶並響應用戶的輸入。

  • 界面邏輯:控制項與控制之間的關係與交互。

在WPF出現之前,Windows Forms、ASP.NET(Web Forms)等技術均使用“事件驅動”理念,界面邏輯和業務邏輯容易糾纏在一起,造成代碼結構複雜難懂、bug難以排除。而WPF技術則是“數據驅動”。

事件驅動:用戶每進行一個操作用會激發程式發生一個事件,事件發生後,用於響應事件的事件處理器就會執行。事件處理器是一個方法(函數),在這個方法中,程式員可以處理數據或調用別的方法,這樣,程式就在事件的驅動下向前執行了。事件驅動的數據是靜態的、被動的;界面控制項是主動的、界面邏輯與業務邏輯之間的橋梁是事件。

數據驅動:當數據發生變化時,會主動通知界面控制項、推動控制項展示最新的數據;同時,用戶對控制項的操作會直接送達數據。在數據驅動理念中,數據占據主動地位、控制項和控制項事件被弱化(控制項事件一般只參與界面邏輯,不再染指業務邏輯,使程式複雜度得到有效控制)。數據與界面之間的橋梁是數據關聯(DataBinding),通過這個橋梁,數據可以流向界面,再從界面流回數據源。

在WPF中,把能夠展示數據、響應用戶操作的UI元素稱為控制項(Control)。控制項所展示的數據稱為控制項的“數據內容”;控制項在響應用戶的操作後會執行自己的一些方法或以事件(Event)的形式通知應用程式(程式員可以決定如何處理這些事件),稱為控制項的“行為”或“演算法內容”。

4.技術結構

WPFSilverlight的技術對比:

技術項目 在WPF中 在Silverlight中
XAML語言 完整 完整
控制項 完整 完整
佈局 完整 完整
Binding 完整 基本完整
依賴屬性 完整 基本完整
路由事件 完整 簡化
命令 完整
資源 完整 完整
控制項模板 完整 基本完整
數據模板 完整 基本完整
繪圖 完整 完整
2D/3D動畫 完整 簡化

類比於Web前端,XAML可以看做HTML+CSS,用作用戶界面的編寫。業務邏輯的具體實現是通過C#編寫,類比於JavaScript。另外,WPF中的技術點與Vue是極其相似的,可以對比學習。

個人小結

WPF是一個用來編寫表現層的工具,使用數據驅動的理念,採用MVVM模式,UI界面與業務邏輯分離。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、無限極往上獲取平臺類目樹信息 數據結構:商品類目id《category_id,商品類目父id《parent_id 數據需求:根據傳入最低層類目id,獲取所有上級類目信息(包含自己) 代碼如下: 1 // 無限極往上獲取平臺類目樹信息 2 public function platformCateg ...
  • 1.前言 冬天很冷,買了一個鍋爐,需要迴圈泵的。簡單來說就是鍋爐水熱了之後迴圈泵自動開啟,然後將熱水輸送走,送到暖 氣,熱水抽走,涼水進入鍋爐,溫度降低,迴圈泵關閉,等待下一次水燒熱。因為需要取暖的房子距離燒鍋爐的地方比較遠,所以需要迴圈 泵,如果距離近的話水燒熱後利用熱水上流冷水迴流的原理會自動完 ...
  • 我們經常需要統計一個方法的耗時,一般我們會這樣做: public class Test { public static void main(String[] args) throws InterruptedException { long start = System.currentTimeMill ...
  • 我本地寫了一個rabbitmq fanout模式的demo。consumer啟動類和producer啟動類都放到了一個springboot程式里。本地調試通過。 突然有個疑問,springboot項目是怎麼來發現主啟動類的呢? 我們知道,預設使用maven打包時,是個普通的可供依賴的jar包,僅包含 ...
  • referer,正確寫法referrer,指的是網站的一種安全策略,在請求頭CSP(Content-Security-Policy),標簽或者是指定的html標簽里都可以設置它,它指的是上一個請求的來源記錄,比如你從a1通過鏈連,跳到a2,那在a2的請求頭裡,就會有a1的網址或者功能變數名稱,這個和refe ...
  • 項目中經常遇到CSV文件的讀寫需求,其中的難點主要是CSV文件的解析。本文會介紹CsvHelper、TextFieldParser、正則表達式三種解析CSV文件的方法,順帶也會介紹一下CSV文件的寫方法。 CSV文件標準 在介紹CSV文件的讀寫方法前,我們需要瞭解一下CSV文件的格式。 文件示例 一 ...
  • 這幾天在看 C++ 的 lambda 表達式,挺有意思,這個標準是在 C11標準 加進去的,也就是 2011 年,相比 C# 2007 還晚了個 4 年, Lambda 這東西非常好用,會上癮,今天我們簡單聊一聊。 一:語法定義 首先我們看下 C++ 語法定義格式: [capture] (param ...
  • 在Winform開發中有時候我們為了不影響主UI線程的處理,以前我們使用後臺線程BackgroundWorker來處理一些任務操作,不過隨著非同步處理提供的便利性,我們可以使用Async-Awati非同步任務處理替換原來的後臺線程BackgroundWorker處理方式,更加的簡潔明瞭。 ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...