【學習筆記】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
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...