WPF:Binding数据绑定

WPF(Windows Presentation Foundation)是微软推出的一种用于构建Windows客户端应用程序的UI框架。数据绑定是WPF中一个强大的功能,它允许UI元素与数据源之间建立连接,使得UI能够自动显示数据源中的数据,并且当数据源中的数据发生变化时,UI能够自动更新。

以下是WPF数据绑定的一些基本概念和步骤:

  1. 数据源(Data Source):这是你要绑定的数据对象。它可以是一个简单的对象、集合、XML数据等。

  2. 绑定目标(Binding Target):这是UI元素的属性,你希望它显示数据源中的数据。

  3. 绑定表达式(Binding Expression):这是连接数据源和绑定目标的表达式。

  4. DataContext:这是一个特殊的属性,它允许你将数据源传递给窗口或控件,而无需显式设置每个控件的绑定。

  5. Binding:这是一个复杂的对象,它定义了数据绑定的所有细节,包括数据源、路径、转换器等。

  6. 数据转换器(Converter):这是一个对象,它允许你在数据源和绑定目标之间转换数据格式。

  7. 更新源触发(UpdateSourceTrigger):这个属性定义了何时将绑定目标的更改写回数据源。

  8. 数据绑定模式(Mode):可以是单向(OneWay)、双向(TwoWay)、单向到源(OneWayToSource)或默认(Default)。

  9. 路径(Path):这是数据源中数据的路径,它告诉WPF如何访问数据。

  10. 错误处理:当数据绑定失败时,你可以设置错误处理逻辑。

数据绑定的基本步骤通常包括:

  • 定义数据源,这可以是代码中的一个对象,也可以是XAML中定义的资源。
  • 设置UI元素的DataContext,这样它就知道去哪里查找数据。
  • 使用Binding表达式将UI元素的属性绑定到数据源的属性。

下面是一个简单的XAML示例,演示了如何将一个文本框的Text属性绑定到一个名为UserName的属性:

<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TextBox x:Name="txtUserName" />
        <TextBlock Text="{Binding ElementName=txtUserName, Path=Text}" />
    </Grid>
</Window>

在这个例子中,TextBlockText属性被绑定到了TextBoxText属性。当TextBox的内容改变时,TextBlock也会显示相同的内容。

WPF中的绑定Binding常用的属性,并使用 

 

  1.  Path

    • 说明:指定绑定目标属性要绑定的数据源属性的路径。
    • 使用
      <TextBox Text="{Binding Path=PropertyName}" />
      或者在代码中:
      Binding binding = new Binding("PropertyName");
      textBox.SetBinding(TextBox.TextProperty, binding);
  2. ElementName

    • 说明:获取或设置要用作绑定源对象的元素的名称。。
    • 使用
      <TextBox Name="txtBindingSource" />
      <TextBox Text="{Binding ElementName=txtBindingSource,Path=PropertyName}" />
  3. Source

    • 说明:指定数据源对象。
    • 使用
      <Window.Resources>
          <local:DataSource x:Key="dataContext" />
      </Window.Resources>
      <TextBox Text="{Binding Source={StaticResource dataContext}, Path=PropertyName}" />
      或者在代码中:
      var source = new DataSource();
      Binding binding = new Binding("PropertyName") { Source = source };
      textBox.SetBinding(TextBox.TextProperty, binding);
  4. Mode

    • 说明:指定绑定模式,可以是OneWay(数据源到目标)、TwoWay(双向)、OneTime(只绑定一次)或OneWayToSource(目标到数据源)。
    • 使用
      <TextBox Text="{Binding Path=PropertyName, Mode=TwoWay}" />
  5. UpdateSourceTrigger

    • 说明:指定何时将绑定目标的更改写回数据源。可以是PropertyChanged(属性改变时)、LostFocus(失去焦点时)、Explicit(需要手动更新)。
    • 使用
      <TextBox Text="{Binding Path=PropertyName, UpdateSourceTrigger=PropertyChanged}" />
  6. Converter

    • 说明:指定一个转换器,用于在数据源和绑定目标之间转换数据。
    • 使用
      <Window.Resources>
          <local:MyConverter x:Key="myConverter" />
      </Window.Resources>
      <TextBox Text="{Binding Path=PropertyName, Converter={StaticResource myConverter}}" />
      或者在代码中:
      Binding binding = new Binding("PropertyName") { Converter = new MyConverter() };
      textBox.SetBinding(TextBox.TextProperty, binding);
  7. StringFormat

    • 说明:指定一个字符串格式,用于格式化绑定的值。
    • 使用
      <TextBox Text="{Binding Path=PropertyName, StringFormat={}{0:0.00}}" />
      这会将数字格式化为两位小数。
  8. FallbackValue

    • 说明:指定当绑定失败时使用的后备值。
    • 使用
      <TextBox Text="{Binding Path=PropertyName, FallbackValue='Not available'}" />
  9. TargetNullValue

    • 说明:指定当目标属性为null时使用的值。
    • 使用
      <TextBox Text="{Binding Path=PropertyName, TargetNullValue='Not available'}" />
  10. NotifyOnValidationError

    • 说明:指定是否在验证失败时通知绑定系统。
    • 使用
      <TextBox Text="{Binding Path=PropertyName, NotifyOnValidationError=true}" />
  11. ValidatesOnDataErrors

    • 说明:指定是否在数据错误时进行验证。
    • 使用
      <TextBox Text="{Binding Path=PropertyName, ValidatesOnDataErrors=true}" />

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/902246.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2025 - AI人工智能药物设计 - 中药网络药理学和毒理学的研究

中药网络药理学和毒理学的研究 TCMSP&#xff1a;https://old.tcmsp-e.com/tcmsp.php 然后去pubchem选择&#xff1a;输入Molecule Name 然后进行匹配&#xff1a;得到了smiles 再次通过smiles&#xff1a;COC1C(CC(C2C1OC(CC2O)C3CCCCC3)O)O 然后再次输入&#xff1a;http…

尚硅谷-react教程-求和案例-数据共享(下篇)-完成数据共享-笔记

#1024程序员节&#xff5c;征文# public/index.html <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>redux</title></head><body><div id"root"></div></body> </html&…

Vuex的基础

文章目录 vuex概述构建vuex[多组件数据共享]环境创建一个空仓库ps.创建仓库时遇到的错误 核心概念 - state状态核心概念 - mutations辅助函数 - mapMutations 核心概念 - actions辅助函数 - mapActions 核心概念 - getters核心概念 - 模块module&#xff08;进阶语法&#xff0…

Python(pandas库2)

DateFrame的添加 上文中DateFrame的增加中&#xff0c;因版本弃置append函数 如果你想要向 DataFrame 添加一行&#xff0c;建议的方法是首先创建一个新的 DataFrame 来表示这行数据&#xff0c;然后使用 pd.concat() 函数来合并它们。 concat 语法&#xff1a; objs: 要连…

基于协同过滤算法的个性化课程推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

JDBC: Java数据库连接的桥梁

什么是JDBC&#xff1f; Java数据库连接&#xff08;Java Database Connectivity&#xff0c;简称JDBC&#xff09;是Java提供的一种API&#xff0c;允许Java应用程序与各种数据库进行交互。JDBC提供了一组标准的接口&#xff0c;开发者可以利用这些接口执行SQL语句、处理结果集…

「C/C++」C++ STL容器库 之 std::multiset 键的集合容器

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

腾讯云跨AZ部署FortigateHA备忘录

随时保存配置 config system globalset admintimeout 480set alias "FortiGate-VM64-KVM"set gui-auto-upgrade-setup-warning disableset hostname "FG-Slave"set revision-backup-on-logout enableset revision-image-auto-backup enableset timezone &…

【 thinkphp8 】00006 启动 内、外置服务器

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【 t…

Java学习Day53:铲除紫云山金丹原料厂厂长(手机快速登录、权限控制)

1.手机快速登录 手机快速登录功能&#xff0c;就是通过短信验证码的方式进行登录。这种方式相对于用户名密码登录方式&#xff0c;用户不需要记忆自己的密码&#xff0c;只需要通过输入手机号并获取验证码就可以完成登录&#xff0c;是目前比较流行的登录方式。 前端页面&…

centos7.x安装openCV 4.6.0版本

## 从源代码编译安装 1.更新系统 sudo yum update -y 2.安装依赖项 sudo yum groupinstall "Development Tools" sudo yum install cmake gcc-c git libjpeg-turbo-devel libpng-devel libtiff-devel libwebp-devel openexr-devel gstreamer1-plugins-base-devel…

iTerm2 保持SSH远程连接

1、保持SSH远程连接的稳定&#xff0c;防止因闲置时间过长而断开连接 When idle, send ASCII code 35 every 60 seconds每60秒 输入# 2、客户端设置保持活动 设置客户端每隔60秒发送一次保活信号&#xff0c;总共尝试3次。 vim ~/.ssh/configHost *ServerAliveInterval 60…

uniapp 底部导航栏tabBar设置后不显示的问题——已解决

uniapp 底部导航栏tabBar设置后不显示的问题——已解决 网上找了一堆解决办法&#xff0c;挨个对着试吧 解决办法一&#xff1a;tabBar里的list第一项和page中的第一项要相同&#xff0c;确实就能显示了。但是问题来了&#xff0c;page中的第一项是入口页&#xff0c;那就意味…

鲸鱼优化算法(Whale Optimization Algorithm, WOA)原理与MATLAB例程

鲸鱼优化算法&#xff08;Whale Optimization Algorithm, WOA&#xff09;是一种基于鲸鱼捕食行为的智能优化算法。它模拟了座头鲸在狩猎时的“气泡网”捕食策略。 文章目录 1.适应度函数2. 更新公式2.1 突袭行为2.2 螺旋更新3.线性递减参数4. 边界处理 MATLAB 实现示例代码说明…

HarmonyOS 5.0应用开发——Navigation实现页面路由

【高心星出品】 文章目录 Navigation实现页面路由完整的Navigation入口页面子页面 页面跳转路由拦截其他的 Navigation实现页面路由 Navigation&#xff1a;路由导航的根视图容器&#xff0c;一般作为页面&#xff08;Entry&#xff09;的根容器去使用&#xff0c;包括单页面&…

前端构建工具vite的优势

1. 极速冷启动 Vite 使用原生 ES 模块 (ESM) 在开发环境下进行工作。相比于传统构建工具需要打包所有的文件&#xff0c;Vite 只在浏览器请求模块时动态加载所需的文件。无打包冷启动&#xff1a;无需预先打包&#xff0c;项目启动非常快&#xff0c;尤其对于大型项目效果更明…

Arduino Uno 同时控制多路舵机

Arduino Uno同时控制4个舵机 舵机可以在0~180度内指定角度的控制。常用于航模、机器人、遥控玩具等物品,然而,很多时候要一次性控制多个舵机,今天以控制4个舵机为例进行说明 接线方式如下图: 舵机的信号线分别接A0,A1,A2,A3。控制舵机从0旋转到180度,再由180度旋转到0度,…

基于NERF技术重建学习笔记

NeRF&#xff08;Neural Radiance Fields&#xff09;是一种用于3D场景重建的神经网络模型&#xff0c;能够从2D图像生成逼真的3D渲染效果。它将场景表征为一个连续的5D函数&#xff0c;利用了体积渲染和神经网络的结合&#xff0c;通过学习光线穿过空间时的颜色和密度来重建场…

机器视觉-相机、镜头、光源(总结)

目录 1、机器视觉光源概述 2、光源的作用 3、光谱 4、工业场景常见光源 4.1、白炽灯 4.2、卤素灯 4.3、 荧光灯 4.4、LED灯 4.5、激光灯 5、光源的基本性能 5.1、光通量 5.2、光效率 5.3、发光强度 5.4、光照度 5.5、均匀性 5.6、色温 5.7、显色性 6、基本光学…

openpnp - 解决“底部相机高级校正成功后, 开机归零时,吸嘴自动校验失败的问题“

文章目录 openpnp - 解决"底部相机高级校正成功后, 开机归零时&#xff0c;吸嘴自动校验失败的问题"概述笔记问题现象1问题现象2原因分析现在底部相机和吸嘴的位置偏差记录修正底部相机位置现在再看看NT1在底部相机中的位置开机归零&#xff0c;看看是否能通过所有校…