WPF教程(九)--数据绑定(2)--绑定模式

news2024/12/23 15:11:39

一、绑定模式
绑定模式以及模式的使用效果。
示例如下是根据ListBox中的选中项,去改变TextBlock的背景色。将 TextBlock 的背景色绑定到在 ListBox 中选择的颜色。在下面的代码中针对TextBlock的 Background 属性使用绑定语法绑定从 ListBox 中选择的值。代码如下。

<StackPanel Grid.Row="1">
            <TextBlock Width="248" Height="24" Text="颜色:"
        TextWrapping="Wrap"/>
            <ListBox x:Name="listColor" Width="248" Height="56">
                <ListBoxItem Content="Blue"/>
                <ListBoxItem Content="Red"/>
                <ListBoxItem Content="Green"/>
                <ListBoxItem Content="Gray"/>
                <ListBoxItem Content="Cyan"/>
                <ListBoxItem Content="GreenYellow"/>
                <ListBoxItem Content="Orange"/>
            </ListBox>
            <TextBlock Width="248" Height="24" Text="改变背景色:" />
            <TextBlock Width="248" Height="24" 
                       Background="{Binding ElementName=listColor,             
                       Path=SelectedItem.Content, Mode=OneWay}">
            </TextBlock>
        </StackPanel>

这里写图片描述

接下来我们对上面的示例进行一些修改:
1) 同一个数据源绑定到两个或多个控件上。如我们的示例中把ListBox的选中项绑定到TextBox与TextBlock。
2) 在绑定语法中增加一个 Mode 属性--绑定模式。对于我们的示例,我们把TextBlock的绑定语法中的Mode属性设为 OneWay 。把TextBox的绑定语法中的Mode属性设为TwoWay

对于绑定模式Mode说明:
1)OneWay 绑定时,每当数据源(ListBox)发生变化时,数据就会从数据源流向目标(TextBlock)。
2)OneTime(仅变更一次) 绑定也会将数据从源发送到目标;但是,仅当启动了应用程序或 DataContext 发生更改时才会如此操作,因此,它不会侦听源中的更改通知。
3)OneWayToSource 绑定会将数据从目标发送到数据源。
4)TwoWay 绑定会将源数据发送到目标,但如果目标属性的值发生变化,则会将它们发回给源。

下面是修改后的示例代码,功能是将 TextBlock (OneWay) 和 TextBox (TwoWay) 绑定到 ListBox 的代码:

<StackPanel Grid.Row="1">
            <TextBlock Width="248" Height="24" Text="颜色:"
        TextWrapping="Wrap"/>
            <ListBox x:Name="listColor" Width="248" Height="56">
                <ListBoxItem Content="Blue"/>
                <ListBoxItem Content="Red"/>
                <ListBoxItem Content="Green"/>
                <ListBoxItem Content="Gray"/>
                <ListBoxItem Content="Cyan"/>
                <ListBoxItem Content="GreenYellow"/>
                <ListBoxItem Content="Orange"/>
            </ListBox>
            <TextBlock Width="248" Height="24" Text="改变背景色:" />
            <TextBlock Width="248" Height="24" Text="{Binding ElementName=listColor, Path=SelectedItem.Content, Mode=OneWay}"
                       Background="{Binding ElementName=listColor, Path=SelectedItem.Content, Mode=OneWay}">
            </TextBlock>
            <TextBox Name="txtTwoWay" Text="{Binding ElementName=listColor,Path=SelectedItem.Content,Mode=TwoWay}"
                     Background="{Binding ElementName=listColor,Path=SelectedItem.Content,Mode=TwoWay}"></TextBox>
        </StackPanel>

   图 2
在上述示例中,对TextBlock使用了 OneWay 绑定模式,只有当选择了 ListBox 中的某一项之后,应用程序将选定的 ListBoxItem(数据源)发送到 TextBlock。我不希望 TextBlock 的变更会影响到 ListBox中的内容。
我对TextBox使用 TwoWay 绑定模式,因为我希望用户在 ListBox 中选择一种颜色后,该颜色就会显示在 TextBox 中,并且其背景色也会随之相应变化。如果该用户在 TextBox 中键入了一种颜色(例如Pink),ListBox 中刚才选中的颜色名称就会被更新(即从目标到数据源),当鼠标再次点击这条修改后的数据时,新值就会被再次发送到TextBox上。这意味着 TextBlock 也会随之改变。(请参见图 2)。
这里写图片描述

如果我将 TwoWay 模式改回到 OneWay,用户则可以编辑 TextBox 中的颜色,但是不会将TextBox中输入的值去替换ListBox中选中项的值。

绑定模式小结:
1)OneWay 模式:当只想让用户看到数据,而不希望用户去修改数据时,可以采用 OneWay 模式,类似winform中的只读属性。
2)TwoWay模式:当希望用户可以对控件中的数据进行修改,同时让用户修改的数据更新到数据源(DataSet、对象、XML 或其他绑定控件)中时,可以使用 TwoWay 绑定。
3)OneWayToSource模式:如果想让用户修改数据源中的数据,而又不想使用TowWay模式,就可以使用 OneWayToSource 绑定。OneWayToSource模式允许通过在原来被看作是绑定源的对象中放置绑定表达式,从而翻转源和目标。
4)OneTime模式:当你的界面中的一系列只读控件均被绑定了数据,并且当用户刷新了数据源时,希望绑定控件中的值仍保持不变,可以使用 OneTime 绑定。此外,当源没有实现 INotifyPropertyChanged 时,OneTime 绑定模式也是一个不错的选择。

小结:绑定目标中的修改何时去修改数据源
在上面的例子中,TextBox 使用了 TwoWay 绑定模式,所以当TextBox 失去焦点时WPF会使用TextBox中的值改变ListBox中的值。如果你不想在TextBox失去焦点时,就去修改ListBox中的值,可以为 UpdateSourceTrigger 指定值,它是用于定义何时更新源的绑定属性。可以为

UpdateSourceTrigger 可以设置三个值:Explicit、LostFocus 和 PropertyChanged。
Explicit(不主动更新数据):如果将 UpdateSourceTrigger 设置为 Explicit,则不会更新源,除非 后台代码脚本中更新数据

LostFocus(丢失焦点更新数据):BindingExpression.UpdateSource 方法。设置为LostFocus ,(TextBox 控件的默认值)指示数据源绑定的控件失去焦点时才会更新。

PropertyChanged(属性值变更更新): 值绑定控件的绑定属性每次发生更改时就去更新数据源中的值。

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

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

相关文章

typeScript的安装及基础使用示例

4.1.安装typescript npm 包&#xff1a; npm install -g typescript 2.查看安装好的版本检验&#xff1a; tsc -v 3.编译一个typescript 文件&#xff1a;tsc hello.ts 4.运行一个ts文件&#xff1a; 首先安装ts-node &#xff0c;ts-node需要在全局去安装。这里要用 npm…

【LeetCode】剑指 Offer 64. 求1+2+…+n p307 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/qiu-12n-lcof/ 1. 题目介绍&#xff08;64. 求12…n&#xff09; 求 12...n &#xff0c;要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句&#xff08;A?B:C&#xff09;。 【测试用例】&a…

android aidl

本文只是记录个人学习aidl的实现&#xff0c;如需学习请参考下面两篇教程 官方文档介绍Android 接口定义语言 (AIDL) | Android 开发者 | Android Developers 本文参考文档Android进阶——AIDL详解_android aidl_Yawn__的博客-CSDN博客 AIDL定义&#xff1a;Android 接口…

实验五 视图与完整性约束

实验五 视图与完整性约束 目录 实验五 视图与完整性约束选择题sql评测题1、SQl视图&#xff1a;建立视图CJ\_STUDENT题目代码题解 2、SQL视图&#xff1a;建立视图AVG\_CJ题目代码 3、SQL视图&#xff1a;建立视图IS\_STUDENT题目代码题解 4、SQL视图&#xff1a;根据视图CJ\_S…

pcle接口详解用途说明

PCIE (peripheral component interconnect express) 中文名&#xff1a;高速串行计算机扩展总线标准&#xff0c;它原来的名称为“3GIO”&#xff0c;由英特尔在2001年提出。 PCIE 有 12345代 和x1/x4/x8/x16插槽 1、PCIE x1/x4/x8/x16插槽模式&#xff0c;的区别和用处 pcel …

ChatGPT 下我的焦虑

鉴于一些读者还未体验过&#xff0c;可以看一下以下 GitHub 项目&#xff0c;收集了几千个封装的 ChatGPT 网站&#xff1a; https://github.com/weekend-project-space/chatgpt-sites 在 ChatGPT 刚出的时候&#xff0c;我对 AI 不屑一顾&#xff0c;大概源自于好几年前人工智…

微服务之异步消息通信

Informal Essay By English I’m sorry that I haven’t updated the article lately because the blogger has been busy with interviews and summarizing their experience. I will create a special article to describe the recent events. Next, let’s get to the topi…

FRP 内网穿透,绕过防火墙控制内网机器

内网穿透&#xff0c;端口映射技术是一门十分古老的技术&#xff0c;他一直是一把双刃剑&#xff0c;可以绕过防火墙入侵目标服务器&#xff0c;也可以方便我们运维&#xff0c;工作。 早年的lcx 或者portmap都是比较老的工具了&#xff0c;frp这个工具比之前的lcx或者portmap都…

element-china-area-data 中国省市区级联选择器

1.安装 npm install element-china-area-data -S 2. 说明 文档&#xff1a;element-china-area-data - npm provinceAndCityData是省市二级联动数据&#xff08;不带“全部”选项&#xff09; regionData是省市区三级联动数据&#xff08;不带“全部”选项&#xff09; prov…

车载操作系统架构研究报告

目 录 前 言 ............................................... 1 1 术语定义及缩略语 ................................................................ 3 1.1 术语与定义 ................................................................. 3 1.2 缩略语 ..............…

[读书笔记] Variational AutoEncoders

小全读书笔记 《Variational AutoEncoders》 1. Generative Model &#xff08;生成式模型&#xff09;简述2. 简单生成模型 AutoEncoders![AutoEncoder结构图](https://img-blog.csdnimg.cn/46c5dcf47e754bf7b71d973a15507e0e.png#pic_center)2.1 结构2.2 不足 3. Variational…

【Vue已解决】阻止Vue在启动时生成生产提示

介绍 这里是小编成长之路的历程&#xff0c;也是小编的学习之路。希望和各位大佬们一起成长&#xff01; 以下为小编最喜欢的两句话&#xff1a; 要有最朴素的生活和最遥远的梦想&#xff0c;即使明天天寒地冻&#xff0c;山高水远&#xff0c;路远马亡。 一个人为什么要努力&a…

3 redis线程IO模型

1 IO模型 1.1 IO IO (Input/Output&#xff0c;输入/输出)即数据的读取&#xff08;接收&#xff09;或写入&#xff08;发送&#xff09;操作&#xff0c;通常用户进程中的一个完整IO分为两阶段&#xff1a;用户进程空间<–>内核空间、内核空间<–>设备空间&…

常用脚本记录

文章目录 1. shell脚本1.1 backup.sh // 目录备份&#xff08;数据备份&#xff09;1.2 check_ip.sh // 检查ip1.3 FlotMonitor.sh // 流量监控1.4 ssh_NoPasswd.sh // 集群免密 2. python脚本2.1 游戏脚本2.1.1 saolei.py // 扫雷(python3)2.1.2 Guessnum.py // 猜数字(python…

Centos7 部署单机 Minio 对象存储服务

MinIO 是一款基于 Go 语言发开的高性能、分布式的对象存储系统&#xff0c;客户端支持 Java&#xff0c;Net&#xff0c;Python&#xff0c;Javacript&#xff0c;Golang语言。 MinIO 的主要目标是作为私有云对象存储的标准方案&#xff0c;非常适合于存储大容量非结构化的数据…

基于AT89C51单片机的简易计算机设计

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87715642?spm1001.2014.3001.5503 源码获取 主要内容&#xff1a; 本设计是以单片机AT89C51为核心的简易计算器设计&#xff0c;要通过芯片AT89C51实现计算器程序…

Vue核心 计算属性 侦听属性

1.9.计算属性 1.插值语法实现 <!DOCTYPE html> <head><meta charset"UTF-8"><title>姓名案例_插值语法实现</title><!-- 引入Vue --><script type"text/javascript" src"../js/vue.js"></script…

linux部署jdk\redis\nginx\fastdfs

一、jdk安装及配置修改 1、本地下载jdk包 jdk-8u131-linux-x64.tar.gz&#xff0c;上传到服务器&#xff08;也可通过命令直接下载&#xff09; 2、将压缩包放服务器/usr/local路径下&#xff0c;后解压&#xff1a;tar -zxvf jdk-8u131-linux-x64.tar.gz 如之前已安装&…

OSCP-XPosedAPI(本地文件包含、查看源码、os.system、命令盲注)

目录 扫描 Web API枚举 命令盲注 提权 扫描 发现了两个开放的端口:端口22上的SSH和端口13337上的未知服务。 用netcat手动探测端口13337,但是运行几个常见的TCP/UDP服务初始化命令没有输出。 尝试了一个完整的脚本和版本nmap扫描的开放端口࿰

Vue3:基础入门

Vue3&#xff1a;基础入门 Date: April 10, 2023 Sum: vue简介、vue的基本使用、vue的指令与过滤器、品牌列表案例 目标&#xff1a; 能够知道 vue 的基本使用步骤 掌握插值表达式和 v-bind 指令的用法 能够掌握如何使用 v-on 指令绑定事件 能够使用 v-model 指令实现数据…