WPF,双向绑定

问题描述

<Windowx:Class="WPF1.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:WPF1"mc:Ignorable="d"Title="MainWindow"UseLayoutRounding="True"Height="350"Width="525"><GridName="bb"><TextBoxx:Name="textBox"Text="{BindingElementName=textBox1,Path=Text,UpdateSourceTrigger=PropertyChanged}"/><TextBoxx:Name="textBox1"Text="{BindingElementName=textBox2,Path=Text,UpdateSourceTrigger=PropertyChanged}"TextChanged="textBox1_TextChanged"/><TextBoxx:Name="textBox2"TextChanged="textBox2_TextChanged"/></Grid></Window>

privatevoidtextBox1_TextChanged(objectsender,TextChangedEventArgse){MessageBox.Show("textBox1的值变");}privatevoidtextBox2_TextChanged(objectsender,TextChangedEventArgse){MessageBox.Show("textBox2的值变");}

在上面的代码中,textBox的Text绑定到textBox1的Text,textBox1的Text绑定到textBox2的Text。TextBox的Text默认都是双向绑定。textBox1和textBox2都注册了TextChanged事件。运行,当在textBox中输入内容后,会首先弹出"textBox2的值变",这就是我的问题所在:textBox的Text绑定到textBox1的Text,并且是双向的,那么textBox的Text更改之后,应该首先是textBox1的Text属性值变化啊,为什么变成了textBox2的Text首先变化呢?

解决方案

本帖最后由 df43r4t 于 2015-11-13 22:26:02 编辑
解决方案二:
没有人知道吗?
解决方案三:
TwoWay或OneWayToSource绑定侦听目标属性的更改,并将这些更改传播回源。这称为更新源。通常,只要目标属性进行了更改,就会进行这些更新。这对于复选框和其他简单控件很有用,但不适用于文本字段。每次键击之后进行更新都会降低性能,用户也得不到通常在提交新值之前使用退格键修改键入错误的机会。因此,Text属性的默认UpdateSourceTrigger值是LostFocus,而不是PropertyChanged。如果将UpdateSourceTrigger值设置为Explicit,则必须调用UpdateSource方法,否则所做的更改不会传播回源。我也是初学,说不出所以然,不过这样更好些;------<StackPanel><TextBoxx:Name="textBox"Width="100"TextChanged="textBox_TextChanged"/><TextBoxx:Name="textBox1"Width="100"Text="{BindingText,ElementName=textBox,Mode=TwoWay}"TextChanged="textBox_TextChanged"/><TextBoxx:Name="textBox2"Width="100"Text="{BindingText,ElementName=textBox1,Mode=TwoWay}"/></StackPanel>-----ints=1;privatevoidtextBox_TextChanged(objectsender,TextChangedEventArgse){MessageBox.Show(s+"");s=s+1;}
解决方案四:
谢谢楼上的回答,不过,我这里不想讨论UpdateSourceTrigger。我已经将UpdateSourceTrigger设置成了PropertyChanged
解决方案五:
别闹,你的代码都运行起来就一个textbox吧
解决方案六:
privatevoidtextBox_TextChanged(objectsender,TextChangedEventArgse){strings=((TextBox)sender).Name;MessageBox.Show(s+"Changed");}
解决方案七:
<StackPanel><TextBoxName="textBox1"Width="100"TextChanged="textBox_TextChanged"/><TextBoxName="textBox2"Width="100"Text="{BindingText,ElementName=textBox1,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"TextChanged="textBox_TextChanged"/><TextBoxName="textBox3"Width="100"Text="{BindingText,ElementName=textBox2,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"TextChanged="textBox_TextChanged"/></StackPanel>c#就是上面那个
解决方案八:
你好像直接修改邦定源了
解决方案九:
这不应该是个结论么

时间: 2024-10-26 00:56:10

WPF,双向绑定的相关文章

Silverlight Telerik控件学习:GridView双向绑定

做过WinForm数据库开发的人,一定有类似经历:DataGrid绑定后,如果允许行编辑,数据一顿修改后,想批量保存修改后的结果,通常是将DataGrid的所有行遍历,用FindControl找出其中的TextBox之类的控件,取值,然后处理,如果行模板中的控件变化了,可能之前的处理代码又要修改... .Net发展到WPF/SL时代,有了双向绑定,这种痛苦经历已经一去不返了,我们只需要关注数据即可,GridView与数据源之间会相互通知各自的变化情况,批量保存时,不管GridView中的数据用户

combo box-WPF中的combobox双向绑定问题

问题描述 WPF中的combobox双向绑定问题 我想当它发生改变的时候,我后台数值也会发生改变.于是我这样写: 运行都是OK的.可是我想让他真的变成绑定, 就是用itemssour = binding那个.怎么能修改下呢 解决方案 WPF的Combobox的ItemSource第二次绑定(更新)问题WPF 的COMBOBOX绑定(匿名类)WPF 数据绑定 combobox 解决方案二: http://www.cnblogs.com/mantian/archive/2013/01/22/2871

学习WPF——元素绑定

概念 从源对象提取一些信息,并用这些信息设置目标对象的属性 示例 在给TextBlock控件的FontSize属性赋值时,我们使用了绑定表达式 数据绑定表达式使用XAML的标记扩展(因此具有花括号)(参见:) 这里创建了一个System.Windows.Data.Binding对象,所以绑定表达式以单词binding开头 在本例中只设置了Binding对象的两个属性ElementName和Path属性 ElementName 指定源元素 Path 指定源元素中的属性 Mode OneWay: 当

深入ASP.NET数据绑定(中)——数据双向绑定机理

在上一篇<深入ASP.NET数据绑定(上)>中,我们分析了在.NET中的数据绑定语法的一些内部机理. 简单说来就是ASP.NET在运行时为我们完成了页面的动态编译,并解析页面的各种服务器端代码,包括数 据绑定语法.而数据绑定的语法虽是一些<%# %>代码块,在生成的代码中,仍然使用了服务器端控 件以及在DataBinding事件调用DataBinder.Eval方法来完成数据的绑定工作.所有的数据绑定模板控件都 使用了这样的机制来进行数据的单向绑定,在.NET 2.0中新增了双向的

理解Angular数据双向绑定_AngularJS

AngularJS是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为核心的是:MVVM.模块化.自动化双向数据绑定.语义化标签.依赖注入等等. 一.什么是数据双向绑定 Angular实现了双向绑定机制.所谓的双向绑定,无非是从界面的操作能实时反映到数据,数据的变更能实时展现到界面. 一个最简单的示例就是这样: <div ng-controller="CounterCtrl"> <span ng-bind="c

JavaScript进阶之深入理解数据双向绑定

前言 谈起当前前端最热门的 js 框架,必少不了 Vue.React.Angular,对于大多数人来说,我们更多的是在使用框架,对于框架解决痛点背后使用的基本原理往往关注不多,近期在研读 Vue.js 源码,也在写源码解读的系列文章.和多数源码解读的文章不同的是,我会尝试从一个初级前端的角度入手,由浅入深去讲解源码实现思路和基本的语法知识,通过一些基础事例一步步去实现一些小功能. 本场 Chat 是系列 Chat 的开篇,我会首先讲解一下数据双向绑定的基本原理,介绍对比一下三大框架的不同实现方式

vue.js初级入门之最基础的双向绑定操作

首先在页面引入vue.js以及其他需要用到的或者可能要用到的插件(这里我多引用了bootstrap和jquery) 引用的时候需要注意文件的路径,准备工作这样基本就完成了,下面正式开始入门. vue.js最重要的一个特点就是双向数据绑定也就是我们常说的MVVM:Model-View-ViewModel.我们要实现双向绑定首先当然要有"双向",这里vue.js为我们提供了View层和Model层.View层就是在HTML中的代码,Model层则是Javascript代码. 下面是一个最基

Vuejs——(1)入门(单向绑定、双向绑定、列表渲染、响应函数)

参照链接: http://cn.vuejs.org/guide/index.html [起步]部分 本文是在其基础上进行补全和更详细的探寻 嗯,根据朋友的建议,我改投vue阵营了   (一)单向绑定 [javascript] view plain copy <div id="app">       {{ message }}   </div>      <script>       new Vue({           el: '#app',  

Silverlight:双向绑定综合应用-自动更新集合汇总字段

场景:有一家公司(类名:Company),它有N多员工(类名:Employee).要在界面上用网格显示所有员工的姓名.工资,并且当操作用户在网格里对员工进行增减或修改其工资时,能自动汇总出员工工资的总和并显示出来. 员工类 Employee代码如下: /// <summary> /// 员工类 /// </summary> public class Employee:INotifyPropertyChanged { private string _name = "&quo