WPF Binding对象、数据校验、数据转换

server/2024/9/18 12:54:25/ 标签: wpf

在WinForm中,我们要想对控件赋值,需要在后台代码中拿到控件对象进行操作,这种赋值形式,从根本上是无法实现界面与逻辑分离的。
在WPF中,微软引入了Binding对象,通过Binding,我们可以直接将控件与数据做绑定,在后台不用拿到控件对象,直接操作数据源,系统会自动监听数据源的变化实时的更新到控件上,相反的,用户改变控件的值,也会实时更新到后台数据源,这也就是我们之前所说的,WPF天生支持MVVM模式。

命令是MVVM模式实现的重要一环,
命令(Command)
模板(Template)、
数据绑定(Binding)
一起构成了WPF中的主要三个核心要素,其中模板实现了WPF灵活的控件自定义(UI),数据绑定实现了前后端的数据分离、命令则实现了前后端的逻辑分离。

在这里插入图片描述
》》》 前端绑定
在这里插入图片描述
》》后端绑定
在这里插入图片描述

binding 数据校验 数据转换

》》数据校验
在这里插入图片描述
》》》自定义一个校验规则,继承ValidationRule抽象类

 public  class ZenValidationRule: ValidationRule{public override ValidationResult Validate(object value, CultureInfo cultureInfo){if (value == null)return new ValidationResult(false, "不能为空!");if (value as string != "Ares")return new ValidationResult(false, "必须是Ares");return new ValidationResult(true, null);}}
 public MainWindow(){InitializeComponent();Binding bd = new Binding() { Path = new PropertyPath("Text"), Source = this.txt1 };ZenValidationRule vd = new ZenValidationRule();vd.ValidatesOnTargetUpdated = true;bd.ValidationRules.Add(vd);bd.NotifyOnValidationError = true; this.txt2.SetBinding(TextBox.TextProperty, bd);//添加一个路由事件  触发的条件 是发送错误【Validation.ErrorEvent】this.txt2.AddHandler(Validation.ErrorEvent,new RoutedEventHandler(this.VadidatingError));}private void VadidatingError(object sender, RoutedEventArgs e){if (Validation.GetErrors(this.txt2).Count>0){this.txt2.ToolTip = Validation.GetErrors(this.txt2)[0].ErrorContent.ToString();}}

》》》数据转换
在这里插入图片描述
在这里插入图片描述

 public class DateConverter : IValueConverter{//当值从绑定源传给绑定目标   触发 该方法public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value == null){return DependencyProperty.UnsetValue;}DateTime date = (DateTime)value;return date.ToString("yyyy-MM-dd");}//当值从绑定目标传递给绑定源时,触发此方法public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){string date = value as string;DateTime txtDate;if (DateTime.TryParse(date, out txtDate)) {return txtDate;}            return DependencyProperty.UnsetValue;}}
<Window x:Class="WpfApp1.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:WpfApp1"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Window.Resources><local:DateConverter x:Key="cvtDate"></local:DateConverter></Window.Resources><StackPanel><DatePicker x:Name="date1" SelectedDateFormat="Short"></DatePicker><TextBox x:Name="txt1" Height="50"  Width="100"  Text="{Binding ElementName=date1, Path=SelectedDate, Converter={StaticResource cvtDate}}"></TextBox><Label Content="{Binding ElementName=date1, Path=Text}"></Label></StackPanel>
</Window>

http://www.ppmy.cn/server/46545.html

相关文章

HTML大雪纷飞

目录 写在前面 HTML简介 完整代码 代码分析 运行结果 系列文章 写在后面 写在前面 小编又又又出现啦&#xff01;这次小编给大家带来大雪纷飞HTML版&#xff0c;不需要任何的环境&#xff0c;只要有一个浏览器&#xff0c;就可以随时随地下一场大雪哦&#xff01; HTM…

Pycharm编辑器下自定义模块导入报错:no module named问题

相信很多使用pycharm 社区版编写python 程序的初学者都会遇到这样一个看似简单但是一时半刻找不到解决头绪的问题&#xff1a; 在同个目录下导入自己编写的模块到主程序的过程中&#xff0c;直接import的时候会报错&#xff1a;ModuleNotFoundError。 通过各种方法尝试以后还是…

把Python写的程序打包成exe应用文件

1.python开发程序&#xff0c;是直接运行的&#xff0c;没有生成运行包的过程&#xff0c;如果需要生成运行包&#xff0c;要做额外操作。 2.用pyinstaller这个库生成python写的软件应用程序。 3.打开控制台程序&#xff0c;使用pip指令安装 pip install pyinstaller&#xff0…

计算机毕业设计hadoop++hive微博舆情预测 微博舆情分析 微博推荐系统 微博预警系统 微博数据分析可视化大屏 微博情感分析 微博爬虫 知识图谱

摘 要 随着社交媒体的普及和互联网技术的快速发展&#xff0c;热点舆情事件频发&#xff0c;对于政府、企业和公众来说&#xff0c;及时了解和分析热点舆情&#xff0c;把握舆论走向&#xff0c;已经成为一项重要的任务。然而&#xff0c;传统的数据处理和分析方法在面对海量…

flinksql 回撤流中主键发生变更的影响(group by中的值发生改变)

flinksql 回撤流中,主键发生变更的影响 1 什么是回撤流2 主键变更场景3 实践中发现的比较好的的实时数仓架构1 什么是回撤流 这篇文章主要谈论一个场景,简单来说: 首先我们来简单的说一下什么是回撤流,以及回撤流的底层原理,举个例子: 这个说的不是很清晰 ,其实倒数第…

LeetCode739:每日温度

题目描述 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 解题思想 使用单…

ARM虚拟机安装OMV

OMV(OpenMediaVault)是基于 Debian GNU/Linux 的网络连接存储&#xff08;network attached storage&#xff0c;NAS&#xff09;解决方案。它包含 SSH、(S) FTP、SMB/CIFS、DAAP 媒体服务器、rsync、 BitTorrent 等很多种服务。它可用于 x86-64 和 ARM 平台。 在x86-64平台上&…

【SQL学习进阶】从入门到高级应用【企业真题】

文章目录 第一题第二题第三题第四题第五题第六题第七题第八题第九题MySQL行转列使用case whengroup by完成 第十题 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f495;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01; &#x1f495;希望您在这…

Linux shell编程学习笔记50:who命令

0 前言 2024年的网络安全检查又开始了&#xff0c;对于使用基于Linux的国产电脑&#xff0c;我们可以编写一个脚本来收集系统的有关信息。比如&#xff0c;我们可以使用who命令来收集当前已登陆系统的用户信息&#xff0c;当前运行级别等信息。 1. who命令 的功能、格式和选项…

ChatGPT-4o 有何特别之处?

文章目录 多模态输入&#xff0c;多模态输出之前的模型和现在模型对比 大家已经知道&#xff0c;OpenAI 在 GPT-4 发布一年多后终于推出了一个新模型。它仍然是 GPT-4 的一个变体&#xff0c;但具有前所未见的多模态功能。 有趣的是&#xff0c;它包括实时视频处理等强大功能&…

ArcgisPro3.1.5安装手册

ArcgisPro3.1.5安装手册 一、目录介绍: 二、安装教程&#xff1a; (1)安装顺序&#xff1a;最先安装运行环境&#xff08;runtime6.0.5&#xff09;,接着安装install里面的文件&#xff0c;最后复制path里面的文件替换到软件bin文件夹下即可。 (2)具体安装步骤&#xff…

MT8781安卓核心板_MTK联发科Helio G99核心板规格参数

MT8781安卓核心板采用先进的台积电6纳米级芯片生产工艺&#xff0c;配备高性能Arm Cortex-A76处理器和Arm Mali G57 GPU&#xff0c;加上LPDDR4X内存和UFS 2.2存储&#xff0c;在处理速度和数据访问速度上都有着出色的表现。 MT8781还支持120Hz显示器&#xff0c;无需额外的DSC…

leetcode 1241每个帖子的评论数(postgresql)

需求 编写 SQL 语句以查找每个帖子的评论数。 结果表应包含帖子的 post_id 和对应的评论数 number_of_comments 并且按 post_id 升序排列。 Submissions 可能包含重复的评论。您应该计算每个帖子的唯一评论数。 Submissions 可能包含重复的帖子。您应该将它们视为一个帖子。…

深入解析Python执行定时任务:从基础到高级

在Python编程中&#xff0c;任务调度是一个常见的需求。不同的场景和需求需要不同的任务调度方法。本文将介绍五种常用的任务调度方法&#xff0c;并分析它们的优缺点和适用场景。 1. 方法一&#xff1a;简单循环 1.1 基础概念 简单循环是Python中最基础的任务调度方法。它通…

Vitis HLS 学习笔记--FRP自由运行流水线

1. 简介 在Vitis HLS中&#xff0c;FRP自由运行流水线&#xff08;Free Running Pipeline&#xff09;是一种流水线风格的架构&#xff0c;它即使在没有输入数据的情况下也会运行。这种架构优化了频率&#xff0c;因为它减少了寄存器使能信号的扇出&#xff0c;简化了流水线控…

SpringBoot实用开发篇第六章(整合第三方技术,ActiveMQ,RabbitMQ,RocketMQ,Kafka)

文章目录 一、邮件二、消息三、购物订单发送手机短信案例四、SpringBoot整合ActiveMQ五、SpringBoot整合RabbitMQ六、SpringBoot整合RocketMQ七、SpringBoot整合Kafka 一、邮件 springboot整合第三方技术第三部分我们来说说邮件系统&#xff0c;发邮件是java程序的基本操作&am…

webserver服务器从零搭建到上线(六)|Timestamp类和InetAddress类

本节我们重点来谈论&#xff1a; 时间类和我们的初始化链接地址类 文章目录 Timestamp类成员函数实现 InetAddress类具体实现 Timestamp类 我们为什么要封装一个时间类呢&#xff1f; 这也是一个大型项目必须的基础组建&#xff0c;这样我们不仅可以提高代码的可读性&#xf…

MYSQL四大操作——查!查!查!

目录 简洁版&#xff1a; 详解版&#xff1a; SQL通用语法&#xff1a; 分类&#xff1a; 1. DDL —库 1.1 查询&#xff1a; 1.2 创建&#xff1a; 1.3 删除 1.4 使用库 2. DDL—表 2.1 查询 2.1.1 查询当前库的所有表&#xff1a; 2.1.2 查询表结构 &#xff1a; 2.1.…

Nginx 相关使用

一、 Nginx 相关使用。 相关命令 启动 nginx start nginx立即停止 nginx nginx -s stop平缓停止 nginx&#xff08;已有请求不会意外停止&#xff09; nginx -s quit重新加载配置文件 nginx -s reload二、Nginx conf 配置文件详解 参考文章皮卡丘的猫 server 配置项 server 可…

初识Linux环境变量

Linux环境变量是操作系统中的一种机制&#xff0c;它们作为键值对存储在内存中&#xff0c;提供了关于用户工作环境的配置信息。这些变量对系统和运行在系统上的程序具有全局性影响&#xff0c;能够定制化程序的运行环境。环境变量通常包含诸如用户主目录&#xff08;HOME&…