WPF Binding 的 Mode 屬性

前言

在 WPF 中,Binding 的 Mode 屬性決定了數據綁定的方向和行為。Mode 是 Binding 類的一個重要屬性,它指定了數據如何在源(Source)和目標(Target)之間流動。可用的 BindingMode 枚舉值有以下幾種:
1)OneWay (單向綁定)
2)TwoWay (雙向綁定)
3)OneTime (一次性綁定)
4)OneWayToSource (反向單向綁定)
5)Default (默認綁定)
下面分別介紹:

1、OneWay (單向綁定)

源屬性的更改會自動更新目標屬性,目標屬性的更改不會影響源屬性,適用于顯示數據但不允許用戶修改的場景
下面的xaml代碼中,slider_test是滑動控件對象,同時也是Binding的源,TextBox作為Binding的目標,由于是單向綁定,所以源屬性的更改會自動更新目標屬性,所以當我們滑動控件slider_test時,TextBox控件Text屬性得到更新。

<Window x:Class="控件作為Binding的源.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:控件作為Binding的源"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><StackPanel><Slider x:Name="slider_test" Minimum="0" Maximum="100" Height="100" Background="Red"  /><TextBox Height="100" Background="Green"  Text="{Binding Path= Value, ElementName=slider_test,Mode=OneWay}" /><Button Height="100" Background="Red" /></StackPanel>
</Window>

在這里插入圖片描述

2、TwoWay (雙向綁定)

源屬性和目標屬性之間的更改會相互影響,目標屬性的更改會更新源屬性,反之亦然,常用于可編輯表單或用戶交互控件
下面的代碼中Mode設置為TwoWay,然后

<Window x:Class="控件作為Binding的源.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:控件作為Binding的源"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><StackPanel><Slider x:Name="slider_test" Minimum="0" Maximum="100" Height="100" Background="Red"  /><TextBox Height="100" Background="Green"  Text="{Binding Path= Value, ElementName=slider_test,Mode=TwoWay }" /><Button Height="100" Background="Red" /></StackPanel>
</Window>

更改滑動控件時,TextBox的Text屬性更新。
在這里插入圖片描述
將TextBox的值更改為50,滑動控件的Value屬性也更新,由于滑動控件的范圍是0到100,所以滑動處于中間位置。下面我貼了兩張圖,第一張圖滑動控件沒有處于中間位置,你會發現此時鼠標光標位于“50”后面,這是因為默認情況下焦點離開TextBox才會觸發TextBox的Text屬性值改變,也就是屬性UpdateSourceTrigger的值默認值是LostFocus,如果你想要TextBox的值更改后立即觸發,直接將UpdateSourceTrigger的值更改為PropertyChanged即可。
在這里插入圖片描述

在這里插入圖片描述
下面的這張圖中滑動控件處于中間位置,因為我點擊了最下方的Button控件,讓鼠標焦點離開了TextBox,所以觸發了TextBox的Text屬性更改。
在這里插入圖片描述

3、OneTime (一次性綁定)

只在綁定初始化時把源屬性的值更新給目標屬性一次,之后源屬性的更改不會影響目標屬性,適用于不需要更新的靜態數據
下面的xaml代碼中,滑動控件slider_test的Value屬性值為40,Binding的Mode屬性為OneTime,所以運行程序以后,TextBox的Text屬性變為40,但是之后改變滑動控件的值TextBox的值不會發生改變,這就是一次性綁定。

<Window x:Class="控件作為Binding的源.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:控件作為Binding的源"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><StackPanel><Slider x:Name="slider_test" Minimum="0" Maximum="100" Height="100" Background="Red"   Value="40"/><TextBox Height="100" Background="Green"  Text="{Binding Path= Value, ElementName=slider_test,Mode=OneTime }" /><Button Height="100" Background="Red" /></StackPanel>
</Window>

在這里插入圖片描述

4、OneWayToSource (反向單向綁定)

與 OneWay 模式相反 ,目標屬性的更改會更新源屬性,源屬性的更改不會影響目標屬性,適用于特殊情況,如從 UI 元素收集數據
比如下面的xaml代碼中Mode設置為OneWayToSource,只有更改目標TextBox的Text屬性值時,源滑動控件slider_test的Value屬性才會發生變化,反之你改變slider_test的值,TextBox的Text屬性不會改變。

<Window x:Class="控件作為Binding的源.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:控件作為Binding的源"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><StackPanel><Slider x:Name="slider_test" Minimum="0" Maximum="100" Height="100" Background="Red"   /><TextBox Height="100" Background="Green"  Text="{Binding Path= Value, ElementName=slider_test,Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}" /><Button Height="100" Background="Red" /></StackPanel>
</Window>

5、Default (默認綁定)

使用默認綁定模式,這個默認綁定模式是根據Binding的目標來決定的,比如目標是可編輯控件(如 TextBox.Text)默認為 TwoWay;對于不可編輯控件,(如 TextBlock.Text)默認為 OneWay

馬工撰寫的年入30萬+C#上位機項目實戰必備教程(點擊下方鏈接即可訪問文章目錄)

1、《C#串口通信從入門到精通》
2、《C#與PLC通信從入門到精通 》
3、《C# Modbus通信從入門到精通》
4、《C#Socket通信從入門到精通 》
5、《C# MES通信從入門到精通》
6、《winform控件從入門到精通》
7、《C#操作MySql數據庫從入門到精通》

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/86422.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/86422.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/86422.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++新紀元:深入C++11/14/17/20核心特性與名企面試精粹(完整版)--8000字硬核解析 | 騰訊/阿里/字節真題實戰

一、右值引用與移動語義&#xff1a;性能革命的核心 面試真題&#xff08;字節跳動&#xff09; "如何實現高效字符串拼接&#xff1f;解釋std::move原理及適用場景" 1. 核心概念 左值&#xff1a;具名對象&#xff0c;可取地址&#xff08;如變量、函數返回值&…

網絡安全之Linux提權由淺入深

前言 在滲透測試與內網攻防中&#xff0c;提權&#xff08;Privilege Escalation&#xff09;是至關重要的一環。尤其在 Linux 環境中&#xff0c;權限的嚴格劃分雖然提升了系統安全性&#xff0c;但一旦攻擊者獲得了初始訪問權限&#xff0c;他們往往會試圖通過各種方式實現權…

【streamlit 動態添加/刪除 輸入條目items】

如何動態添加添加條目呢?類似下邊的效果 pip install streamlit 代碼 app.py import streamlit as stdef rule_component(st_ph: st = st):## 添加解析規則, 動態添加元素if

量學云講堂王巖江宇龍2025年第58期視頻 主課正課系統課+收評

量學云講堂王巖江宇龍2025年第58期視頻 主課正課系統課收評資源簡介&#xff1a; 課程目錄&#xff1a; 江宇龍課程 31楓林陽-股票走勢中多空必爭的關鍵要地(1).mp4 32楓林陽-關鍵要地的直觀表現之畫線標準.mp4 33楓林陽-提綱舉領之量線學習的要點綱要.mp4 34楓林陽-主力攻…

Milvus【部署 03】Linux OpenEuler 環境在線+離線安裝及卸載

在線離線安裝及卸載 1. 在線安裝2. 離線安裝3. 卸載 1. 在線安裝 [roottcloud milvus]# yum install ./milvus-2.1.4-1.el7.x86_64.rpm安裝日志&#xff1a; OS …

< 自用文兒 在 Ubuntu 上安裝 Claude Code > 發現了“京東云 JDCloude” 有國內商業云中最低的網絡性能

Claude Code&#xff1a; 最近刷屏這個詞&#xff1a;Claude Code 以后叫 CC&#xff0c;它是 Anthropic 的一款智能編程工具&#xff0c;幾個特點&#xff1a; 在終端運行 像使用命令行工具一樣&#xff0c;無需圖形用戶界面 GUI深度理解整個代碼庫 使用自然語言 讓其修復 b…

Docker部署prometheus+grafana+...

Docker部署prometheusgrafana… prometheus官網 官網 https://prometheus.io/ 中文網址 https://prometheus.ac.cn/ Prometheus簡介 Prometheus(普羅米修斯&#xff09;是一套開源的監控&報警&時間序列數據庫的組合&#xff0c;由SoundCloud公司開發。 Prometheus基…

Python爬蟲實戰:研究Spynner相關技術

1 引言 1.1 研究背景與意義 隨著互聯網的迅速發展,網頁內容呈現形式日益復雜。傳統的靜態網頁逐漸被動態網頁所取代,大量內容通過 JavaScript 動態生成或 AJAX 異步加載。這使得傳統爬蟲(如基于 Requests 庫的爬蟲)難以獲取完整的網頁信息,因為它們只能獲取頁面的初始 H…

人工智能訓練知識學習-TTS(智能語音合成)

人機對話——TTS&#xff08;TextToSpeech&#xff09; 概念&#xff1a; TTS技術&#xff0c;即文本轉語音技術&#xff0c;是一種將文字內容轉換為語音輸出的技術。它通過計算機程序和算法&#xff0c;將文本信息轉化為自然流暢的語音信號&#xff0c;讓用戶能夠聽到文字內…

【Java高頻面試問題】JVM篇

【Java高頻面試問題】JVM篇 類加載機制加載&#xff08;Loading&#xff09;連接&#xff08;Linking&#xff09;?初始化&#xff08;Initialization&#xff09;?使用&#xff08;Using&#xff09;與卸載&#xff08;Unloading&#xff09; 類加載器和雙親委派模型類加載器…

DBeaver的sql編輯器文本格式字體大小設置

DBeaver的sql編輯器文本格式字體大小設置。開始就沒有找到。早上比較清醒被我發現了。記錄下來

自學Java怎么入門

自學Java其實沒有想象中那么難&#xff0c;只要找對方法&#xff0c;循序漸進地學習&#xff0c;很快就能上手。下面我結合自己的經驗&#xff0c;給你整理一條清晰的學習路徑&#xff0c;咱們一步步來。 一、先了解Java能做什么 在開始之前&#xff0c;建議你先看看Java都能…

操作系統面試知識點(1):操作系統基礎

目錄 1.什么是操作系統: 2.操作系統有哪些功能? 3.常見的操作系統有哪些 4.用戶態和內核態 5.內核態權限這么高,為什么不還要用戶態? 6.用戶態和內核態是如何切換的? 7.系統調用 8,系統調用的過程 ???????1.什么是操作系統: (1)操作系統(OS)是管理計算機軟硬…

Linux 和 Windows 服務器:哪一個更適合您的業務需求?

在選擇服務器操作系統時&#xff0c;Linux 和 Windows 服務器是最常見的兩種選擇。它們各有特點&#xff0c;適合不同的業務需求和使用環境。本文將詳細分析 Linux 和 Windows 服務器的主要差異&#xff0c;包括成本、安全性、性能、定制化能力和用戶界面等方面&#xff0c;幫助…

CertiK聯創顧榮輝將于港大活動發表演講,分享Web3安全與發展新視角

CertiK聯合創始人、哥倫比亞大學教授顧榮輝&#xff0c;將于6月30日出席香港大學經管學院主辦的“Web3革新與商業機遇”活動&#xff0c;并發表主題演講《規模化Web3&#xff1a;面向全球受眾的創新與安全平衡之道》。 本次活動由港大經管學院高層管理教育主辦&#xff0c;Met…

SpringAI系列---【SpringAI如何接入阿里云百煉大模型?】

1.導言 阿里云百煉的通義千問模型支持 OpenAI 兼容接口&#xff0c;您只需調整 API Key、BASE_URL 和模型名稱&#xff0c;即可將原有 OpenAI 代碼遷移至阿里云百煉服務使用。 如果是要接入阿里云百煉模型&#xff0c;首先推薦使用Spring AI Alibaba&#xff0c;而不是使用Spri…

電子電氣架構 --- 實時系統評價的概述

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

Flink SQL執行流程深度剖析:從SQL語句到分布式執行

在大數據處理領域&#xff0c;Flink SQL憑借其強大的處理能力和易用性&#xff0c;成為眾多開發者的選擇。與其他OLAP引擎類似&#xff0c;Flink SQL的SQL執行流程大致都需要經過詞法解析、語法解析、生成抽象語法樹&#xff08;AST&#xff09;、校驗以及生成邏輯執行計劃等步…

什么是redis

Redis是一個開源的、基于內存的高性能鍵值存儲數據庫&#xff0c;廣泛用于緩存、消息隊列、會話存儲等場景。 - 核心特點&#xff1a; - 內存存儲&#xff1a;數據存儲在內存中&#xff0c;讀寫速度極快。 - 鍵值對&#xff1a;以鍵值對形式存儲數據&#xff0c;鍵通常是字…

《從0到1:C/C++音視頻開發自學指南》

開啟自學之旅&#xff1a;為何選擇 C/C 音視頻開發 在當今數字化時代&#xff0c;音視頻開發的應用場景極為廣泛&#xff0c;深刻融入了我們生活與工作的方方面面。從火爆的直播行業&#xff0c;無論是電商直播中主播與觀眾的實時互動&#xff0c;還是游戲直播里精彩賽事的實時…