WPF:Binding数据绑定

news2024/10/24 20:15:04

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}" />

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WeMapEngine开发实战,创建你的第一个GIS项目

我们在《WeMapEngine可快速构建的GIS应用功能》一文中为你分享了WeMapEngine可快速建的GIS应用功能。 今天再为你分享基于WeMapEngine的开发实战&#xff0c;演示如何快速创建第一个GIS项目。 创建你的第一个GIS项目 现在&#xff0c;我们开始构建第一个项目。 在这个项目中…

emulator -version报错解决方案

使用android studio安装安卓环境之后&#xff0c;会发现emulator -version报如下错 [14960]:ERROR:android/android-emu/android/qt/qt_setup.cpp:28:Qt library not found at ..\emulator\lib64\qt\lib Could not launch C:\Users\litbai\..\emulator\qemu\windows-x86_64\qe…

【Java小白图文教程】-04-循环结构

精品专题&#xff1a; 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12789841.html?spm1001.20…

深入理解计算机系统--计算机系统漫游

对于一段最基础代码的文件hello.c&#xff0c;解释程序的运行 #include <stdio.h>int main() {printf ( "Hello, world\n") ;return 0; }1.1、信息就是位上下文 源程序是由值 0 和 1 组成的位&#xff08;比特&#xff09;序列&#xff0c;8 个位被组织成一组…

springboot048校园资料分享平台(论文+源码)_kaic

校园资料分享平台 摘要 随着信息互联网购物的飞速发展&#xff0c;国内放开了自媒体的政策&#xff0c;一般企业都开始开发属于自己内容分发平台的网站。本文介绍了校园资料分享平台的开发全过程。通过分析企业对于校园资料分享平台的需求&#xff0c;创建了一个计算机管理校园…

无人机的电池放电详解!

一、定义与表示方法 无人机的电池放电率是指电池在一定时间内放出其储存电能的能力&#xff0c;这一参数通常用C数来表示。C数越大&#xff0c;表示放电速率越快。 例如&#xff0c;一个2C的电池可以在1/2小时内放完其全部电量&#xff0c;而一个10C的电池则可以在1/10小时内…

喜讯!望繁信科技荣膺2022年中国超自动化先锋企业TOP20

36氪重磅发布「2022中国超自动化先锋企业」调研结果。凭借多年在流程挖掘领域过硬的技术实力和突出的产品创新力&#xff0c;望繁信科技在众多调研样本企业中脱颖而出&#xff0c;赢得了专家评委的充分认可&#xff0c;成功入选2022年中国超自动化先锋企业TOP20。 什么是超自动…

【书生大模型实战营】闯关任务1-入关岛

这里写自定义目录标题 第一关 L0G1000 Linux 基础知识 第一关 L0G1000 Linux 基础知识 SSH连接与端口映射并运行hello_world.py 关键截图&#xff1a;

502 错误码通常出现在什么场景?

服务器过载场景 高流量访问&#xff1a;当网站遇到突发的高流量情况&#xff0c;如热门产品促销活动、新闻热点事件导致网站访问量激增时&#xff0c;服务器可能会因承受过多请求而无法及时响应。例如&#xff0c;电商平台在 “双十一” 等购物节期间&#xff0c;大量用户同时…

Windows解决localhost拒绝了连接请求

最近&#xff0c;在开发前端Vue项目时&#xff0c;Vue项目启动成功&#xff0c;没有任何报错&#xff0c;服务控制台已出现APP访问地址&#xff0c;如下图所示。 览器打开后页面先是空白&#xff0c;然后过了一会儿显示无法访问此网站&#xff0c;localhost拒绝了我们的连接请…

WPF MVVM模式实现DataGrid编辑

本文是一个MVVM模式开发的基础教程&#xff0c;完全手写实现&#xff0c;未借助三方框架&#xff0c;适用于初学者 要实现DataGrid的编辑&#xff0c;步骤如下&#xff1a; 1、创建两个窗口&#xff0c;第一个窗口用于显示DataGrid&#xff0c; 布局如下&#xff1a; 这个界…

Data+AI下的云数仓未来已来!

DataAI下的云数仓未来已来&#xff01; 前言云数仓是什么&#xff1f;云数仓的概念与背景数据孤岛问题与云数仓的优势 现代数仓如何建设&#xff1f;灵活架构与弹性扩展实时与离线处理并存安全与合规性&#xff1a;现代数仓的基石 AI如何助力数仓建设&#xff1f;AI驱动的数据处…

《探索 NESMA:软件度量领域的璀璨之星》

《探索 NESMA&#xff1a;软件度量领域的璀璨之星》 一、NESMA 初印象 NESMA&#xff08;Netherland Software Measurement Association&#xff09;&#xff0c;作为荷兰软件度量协会的简称&#xff0c;在软件规模度量领域占据着重要地位。它是五种 ISO 国际功能点标准之一&am…

C++学习路线(二十二)

构造函数 构造函数作用 在创建一个新的对象时&#xff0c;自动调用的函数&#xff0c;用来进行“初始化”工作:对这个对象内部的数据成员进行初始化。 构造函数特点 1.自动调用(在创建新对象时&#xff0c;自动调用) 2.构造函数的函数名&#xff0c;和类名相同 3.构造函数…

visual studio设置修改文件字符集方法

该方法来自网文&#xff0c;特此记录备忘。 添加两个组件&#xff0c;分别是Force UTF-8,FileEncoding。 截图如下&#xff1a; 方法如下&#xff1a;vs中点击“扩展”->“管理扩展”&#xff0c;输入utf搜索&#xff0c;安装如下两个插件&#xff0c;然后重启vs&#xf…

Cursor零基础小白教程系列 - 创建你的第一个Cursor 项目

最适合小白零基础的Cursor教程 网站lookai.top相同作者&#xff0c;最新文章会在网站更新&#xff0c;欢迎收藏书签 创建你的第一个Cursor 项目 实操视频 概述 开始使用Cursor进行编程的第一步是创建或导入一个项目。本指南将帮助您了解如何在Cursor中创建新项目、导入现有项…

GPB外链:独立站SEO提升的必备利器!

为什么GPB外链这么受欢迎&#xff1f;这主要是因为它能显著提升网站的权威性和可见性。每一条GPB外链都来自高权重的独立域名&#xff0c;并附有一篇与网站主题高度相关的原创文章。这样的外链&#xff0c;不仅对提升网站排名有帮助&#xff0c;还能为你带来更多的精准流量。 与…

Konva框选移动

效果&#xff0c;可以单独点击控制大小&#xff0c;也可框选控制 代码&#xff1a; <template><div class"rect"><div id"canvas"></div> <!-- 画布容器 --></div> </template><script setup lang"ts&…

【JVM】—G1 GC日志详解

G1 GC日志详解 ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&#x1f60a; 文章目录 G1 GC日志详解1 G1 GC周期2 G1日…

老牌Trans也放量灌水中?年刊文量1000+,网友分享3个月可录,0版面费!

【SciencePub学术】今天给大家推荐的是一本计算机领域的SCI—《IEEE TRANSACTIONS ON ELECTRON DEVICES》&#xff0c;IEEE-Trans系列&#xff0c;虽然常年只能位居2区&#xff0c;不过投稿难度相对较低&#xff0c;所以还是深受大家喜爱的。 期刊概况 IF&#xff1a;2.9 分…