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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;还是游戏直播里精彩赛事的实时…