WPF绑定Binding及模式
绑定,就是把一个对象属性的值绑定在别的对象的属性上
1. 默认绑定
public class Company
{
public string Name { get; set; }
}
XAML代码
1 <StackPanel x:Name="stackPanel">
2 <TextBox x:Name="txtName" Text="{Binding Path=Name}"></TextBox>
3 <TextBox x:Name="txtName2" Text="{Binding Path=Name}"></TextBox>
4 <Button Click="Button_Click">Ok</Button>
5 </StackPanel>
后端代码:
01 namespace DeepXAML
02 {
03 public partial class MainWindow : Window
04 {
05 Company mCompany;
06 public MainWindow()
07 {
08 InitializeComponent();
09 mCompany = new Company { Name = "Microsoft" };
10 this.stackPanel.DataContext = mCompany;
11 }
12 private void Button_Click(object sender, RoutedEventArgs e)
13 {
14 MessageBox.Show(this.mCompany.Name);
15 mCompany.Name = "Sun";
16 }
17 }
18 }

我们把第一个文本框的值改为IBM,并点击按钮

这个结果说明,我们绑定到一个普通的UI上时,前端的(绑定的目标)改变会时绑定的源改变。但我们第二次点击按钮时,出现如下的图

2. 双向绑定
上图后台使用代码改变对象的属性值,但前端绑定的值并未改变。那么如何让后台属性的变化通知到绑定的UI控件,让UI控件更新值呢?我们需要实现一个接口,现在我们对Company做如下改造
01 namespace DeepXAML
02 {
03 public class Company:INotifyPropertyChanged
04 {
05 private string name;
06 public event PropertyChangedEventHandler PropertyChanged;
07 public string Name
08 {
09 get { return name; }
10 set {
11 name = value;
12 if (this.PropertyChanged != null)
13 {
14 this.PropertyChanged.Invoke(this,new PropertyChangedEventArgs("Name"));
15 }
16 }
17 }
18 }
19 }
现在我们看一下我们点击按钮的结果,此时UI的值已经自动更新为后台更改的对象的值Sun了。

3.Binding的方向
<TextBox x:Name="txtName" Text="{Binding Path=Name, Mode=TwoWay}"></TextBox>
<TextBox x:Name="txtName2" Text="{Binding Path=Name, Mode=OneWay}"></TextBox>
这个在Binding时可以设置Mode.

oneWay:使用 OneWay 绑定时,每当源发生变化,数据就会从源流向目标。
OneTime: 绑定也会将数据从源发送到目标;但是,仅当启动了应用程序或 DataContext 发生更改时才会如此操作,因此,它不会侦听源中的更改通知。
OneWayToSource: 绑定会将数据从目标发送到源。
TwoWay: 绑定会将源数据发送到目标,但如果目标属性的值发生变化,则会将它们发回给源。
Default: binding的模式根据实际情况来定,如果是可编辑的就是TwoWay,只读的就是OneWay.
上面的例子不设Mode时,默认的就是Default.
4.如何用代码设定Binding
<StackPanel x:Name="stackPanel">
<TextBox x:Name="txtName"></TextBox>
</StackPanel>



WPF绑定Binding及模式的更多相关文章
- WPF绑定(Binding)(4)
什么是绑定(Binding)? 在winform中, 我们常常会用到各种类型的赋值, 例如: button1.Text="Hello"; label.Text="Hell ...
- WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参
原文:WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参 ContextMenu无论定义在.cs或.xaml文件中,都不继承父级的DataC ...
- WPF之Binding初探
初学wpf,经常被Binding搞晕,以下记录写Binding的基础. 首先,盗用张图.这图形象的说明了Binding的机理. 对于Binding,意思是数据绑定,基本用法是: 1.在xmal中使用 ...
- WPF之Binding深入探讨
原文:http://blog.csdn.net/fwj380891124/article/details/8107646 1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在 ...
- WPF快速入门系列(4)——深入解析WPF绑定
一.引言 WPF绑定使得原本需要多行代码实现的功能,现在只需要简单的XAML代码就可以完成之前多行后台代码实现的功能.WPF绑定可以理解为一种关系,该关系告诉WPF从一个源对象提取一些信息,并将这些信 ...
- WPF的Binding功能解析
1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...
- WPF中使用MVVM模式进行简单的数据绑定
计划慢慢整理自己在WPF学习和工作应用中的一些心得和想法,先从一个简单的用法说起 在WPF中,XAML标记语言中绑定数据,而数据源就是指定为ViewModel类,而非界面本身的逻辑代码类 这样一定程度 ...
- WPF之Binding深入探讨--Darren
1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...
- WPF 杂谈——Binding表达式
不管是定义控件还是用户控件都会用到一个功能--绑定(Binding).书面的叫法:元素绑定.意思就是让绑定的元素实现数据同步.在笔者看来WPF引入这一个功能实在是太完美了.编程更加的具体化.特别是跟M ...
随机推荐
- ylbtech-LanguageSamples-COMInteropPart1(COM 互操作 - 第一部分)
ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-COMInteropPart1(COM 互操作 - 第一部分) 1.A,示例(Sampl ...
- parallax corrected cubemap
https://community.arm.com/graphics/b/blog/posts/reflections-based-on-local-cubemaps-in-unity https:/ ...
- Android TextView 常见问题与使用总结
一.文字显示行数设置 1. 仅显示一行文字 android:singleLine="true" setTransformationMethod(TransformationMeth ...
- 【android相关】【问题解决】R.java文件丢失
在进行android开发过程中,有时候,我们会遇到gen文件中R.java丢失的现象.重新build,或者clean工程,close并重新打开Project,但有时也没解决. 这可能是由于不小心把xm ...
- 网页视频播放方案chimee 组件使用
1.概述 鉴于目前 H5-Video 在 Web 生态环境中存在较大差异化(兼容性)的表现,本文主要介绍使用奇舞团开发chimee 组件进行视频播放的用法. chimee 组件地址: http://c ...
- Android-LinearLayout布局技巧(二)
先来看看图: 布局代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns ...
- iOS 核心动画 Core Animation浅谈
代码地址如下:http://www.demodashi.com/demo/11603.html 前记 关于实现一个iOS动画,如果简单的,我们可以直接调用UIView的代码块来实现,虽然使用UIVie ...
- 窥探try ... catch与__try ... __except的区别
VC中的这两个东西肯定谁都用过, 不过它们之间有什么区别, 正好有时间研究了一下, 如果有错误欢迎拍砖.基于VC2005, 32位XP 平台测试通过. 估计对于其他版本的VC和操作系统是不通用的. 1 ...
- asp.net+mvc+easyui+sqlite 简单用户系统学习之旅(四)—— session传递登录人信息显示+用户注销
前面的学习,已经做好了简单的登录和主页,涉及了三层软件架构,mvc,easyui的layout.tree.tab.window,sqlite,动软代码自动生成. 下面完善一下登录跳转主页后,在sout ...
- webpack打包vue2.0项目时必现问题(转载)
原文地址:http://www.imooc.com/article/17868 [Vue warn]: You are using the runtime-only build of Vue wher ...