WPF自學入門(七)WPF 初識Binding

来源:https://www.cnblogs.com/fly-bird/archive/2018/03/15/8576748.html
-Advertisement-
Play Games

今天記錄一下Binding的基礎和具體的使用方法,說起這個Binding,在WPF中,Binding是很重要的特征,在傳統的Windows軟體來看,大多數都是UI驅動程式的模式,也可以說事件驅動程式,這個程式模式在工作過幾年的程式員中是根深蒂固的,WPF作為Winform的升級,它把UI驅動程式徹底 ...


       今天記錄一下Binding的基礎和具體的使用方法,說起這個Binding,在WPF中,Binding是很重要的特征,在傳統的Windows軟體來看,大多數都是UI驅動程式的模式,也可以說事件驅動程式,這個程式模式在工作過幾年的程式員中是根深蒂固的,WPF作為Winform的升級,它把UI驅動程式徹底改變了,核心回到了數據驅動程式的模式上面,這樣,程式就回到了演算法和數據。數據,才是真正需要重點處理的!

        Binding在數據驅動程式模式中起著至關重要的作用,它最為重要的一個特點就是通訊,連接著前臺與後臺。首先看一下Binding最簡單的使用方法:

一、元素之間的綁定

 

    這裡有3個控制項,Slider,TextBox,Label,其中TextBox和Label都作為目標,Slider都作為數據源,把Slider中的值交由兩個控制項體現,移動滑塊,TextBox會自動顯示Value的值,也就是FontSize的值。因為兩個綁定都設置了雙向綁定,所以可以在文本框中輸入值,然後丟失焦點,也能反饋回去。

看一下XAML中的綁定語句,這裡用的ElementName就是制定要綁定的對象的名字,Path就是要綁定的依賴項屬性,mode就是綁定方式,這裡需要說明的是mode有五種方式:

(1)OneWay 單向綁定

(2)TwoWay 雙向綁定

(3)OneTime,最初根據源屬性值設置目標屬性,以後就忽略所有改變,就是說,只進行初始化。

(4)OneWayToSource,這和OneWay相反

(5)Default,這是預設形式,它根據目標屬性自動設置。

      如果把TextBox中的值修改成其他的,滑條位置沒有改變,字體大小也沒有改變,這是什麼回事呢?當TextBox失去焦點的時候,就會發生相應的改變了。這是因為這個綁定中的預設更新機制,更新機制Binding.UpdateSourceTrigger,這個屬性有4個枚舉值

(1)PropertyChange,當值改變的時候,就更新。

(2)LostFocus,當時去焦點的時候更新.

(3)Explicit,當調用BingingExpression.UpdateSource()方法的使用更新,其他情況不會更新。

(4)Default,預設形式

註意:以上這四種更新機制的設定,只會影響源數據,而不會影響目標數據。

 

二:元素自身的綁定

     除了可以綁定別的元素,也可以綁定自身的其他屬性,例如Slider自身的Opacity屬性和自身的Value屬性綁定,當滑塊向左移動的時候,會逐漸隱藏起來。

三:後臺數據與元素之間的綁定

     前面說了元素之間的綁定和元素自身的綁定,最後重點來了後臺數據和前臺元素的綁定,這種綁定方式很好地體現了數據驅動程式的運行模式。

     首先新建Person類

 

    頁面後臺代碼

 

顯示效果:

 

       數據的綁定的方式已經寫完了。Binding是一條高速公路,那麼為了提高數據傳遞的合法性和有效性,我們要在這條高速公路中建立起一系列的關卡,有的用來轉換數據,有的用來校驗數據,下麵就說一下Binding對數據的校驗和轉換。

(一)Binding的數據校驗

     Binding的數據校驗工作是派生自ValidationRule類,並且對Validate方法進行重寫的自定義類!看一下實例:

 

      先設計一個檢驗類,它繼承ValidationRule類並且重寫Validate方法。使用這個類的時候是創建Binding的時候設置校驗的。

代碼如下:

 

好了,看一下結果

 

      因為設置了值傳過去的值不能是超過0~100之間,所以當超過了就顯示紅色邊框。在Binding中,預設是會認為數據源是肯定正確的,所以如果將TextBox作為數據源,而Slider作為目標,數據源輸入錯誤是沒有顯示的,那麼怎麼解決這個問題呢,設置VdataValidationRule.ValidatesOnTargetUpdated = true;

 

( 二)Binding的數據轉換

       Binding還有另外一種機制稱為數據轉換,當Source端指定的Path屬性值和Target端指定的目標屬性不一致的時候,我們可以添加數據轉換器(Convert)。上面我們提到的問題實際上就是double和stirng類型相互轉換的問題,因為處理起來比較簡單,所以WPF類庫就自己幫我們做了,但有些數據類型轉換就不是WPF能幫我們做的了,當遇到這些情況,我們只能自己動手寫Converter,方法是創建一個類並讓這個類實現IValueConverter介面。

 

        這個就是日期轉換類,它有兩個方法:

       1.當值從綁定源傳播給綁定目標時,調用方法Convert

       2.當值從綁定目標傳播給綁定源時,調用此方法ConvertBack,方法ConvertBack的實現必須是方法Convert的反向實現。

        這兩個方法分別在裡面寫入怎麼轉換,轉換成什麼類型就是返回類型。

下麵就是使用:

 

好了,把這個綁定的Converter屬性設置成我們設計的轉換類的實例就可以了。看一下程式的界面

 


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

-Advertisement-
Play Games
更多相關文章
  • 網上有太多的VHDL和verilog比較的文章,基本上說的都是VHDL和verilog之間可以實現同一級別的描述,包括模擬級、寄存器傳輸級、電路級,所以可以認為兩者是等同級別的語言。很多時候會了其中一個,當然前提是真的學會,知道rtl(寄存器傳輸級)的意義,知道rtl與電路如何對應,在此基礎上,則很 ...
  • For 迴圈語句 基礎知識 for迴圈可以遍歷任何序列的項目,如一個列表或者一個字元串。 語法: for 迴圈規則: do sth 判斷對象是否可迭代 zip() 函數 函數用於將可迭代的對象作為參數,將對象中對應的元素打包成一個個元組,然後返回由這些元組組成的列表。 如果各個迭代器的元素個數不一致 ...
  • 1.一些簡單的dos命令: – d: 回車 盤符切換 – dir(directory):列出當前目錄下的文件以及文件夾 – del:刪除文件 – md:創建文件夾 – rd:刪除文件夾 – cd (change directory)改變指定目錄(進入指定目錄) 進入 cd 目錄;cd 多級目錄 回退 ...
  • 呵呵。大家都知道五服以內不得通婚,即兩個人最近的共同祖先如果在五代以內(即本人、父母、祖父母、曾祖父母、高祖父母)則不可通婚。本題就請你幫助一對有情人判斷一下,他們究竟是否可以成婚? 輸入格式: 輸入第一行給出一個正整數N(2 ≤ N ≤),隨後N行,每行按以下格式給出一個人的信息: 其中ID是5位 ...
  • 內容:顯示工具欄,設置主題、快捷鍵、開頭文字、解釋器 一些可能用到的設置,想起來就發上來。有需要的可以查看 ###############顯示工具欄 ##############設置主題,我用的主題是這種比較暗的,不喜歡太亮的,比如那種基本都是白色的。 ####################### ...
  • 目的: 為了從搜索結果中提取所有網頁,以備後續處理。 訪問百度鏈接分析 名稱 值 說明 wd 任意文字 關鍵字 rn 可以不指定,預設為10,最大為50,最小為1,可設置為任意值 一頁包含的結果條目數 pn 百度預設顯示760條,所以最後一頁為pn=750 第一條結果的索引位置 示例: https:... ...
  • 項目搭建 1.導入原型 只有前端頁面,但沒有後端代碼的項目。即一個只有頁面但沒有功能的項目! 導入原型: 2.前臺需求分析 前臺是針對會員購書,而後臺是管理員管理系統並完成售書。 2.1 前臺主頁 /index.jsp使用<jsp:forward>轉發到/jsps/main.jsp,、main.js ...
  • 運算符和條件語句 算術運算符 比較運算符 邏輯運算符 bool()判斷一個對象是真還是假 A and B if A ==true : return bool(B) if A == false : return false;先執行A ,如果A為true,則將B的結果返回。如果A為false,則直接返回 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...