WPF笔记(1.6 数据绑定)——Hello,WPF!
原文:WPF笔记(1.6 数据绑定)——Hello,WPF!
这个一节都是在讲一个数据绑定的示例。
功用:输入姓和名,点击Add按钮,ListBox增加一条记录,永远是字符串“name: nick”;ListBox原先有3条不同记录,选中ListBox一条记录,两个输入框姓和名相应变化。
技术分析:2个类,一个xaml,一个一个分析。
1)Nickname类, 实体类,提供两个属性Nick和Name,还有一个PropertyChanged事件。实现了INotifyPropertyChanged 接口(从而可以使用PropertyChangedEventArgs事件,在给属性赋值时,激发该事件,通知外界customer——观察者xaml界面相应变化,即数据同步。
2)Nicknames类,实现ObservableCollection<Nickname>接口,类下不再提供自定义的东西,因为实现该接口后,这个类成为了一个Nickname的强类型集合,并且可以将数据的add和remove通知customer,从而数据同步。
注意,INotifyPropertyChanged 适用于单个的类属性,ObservableCollection适用于监视某一堆的数据是否发生变化(add/remove),这是二者的区别。
3)window1.xaml.cs 后台类
提供内部集合names,Nicknames类型。
在构造函数中,先初始化以及绑定button_Click事件,然后实例化names变量,最后绑定names到前台的DockPanel控件:
dockPanel.DataContext = this.names;
DataContext属性设置是关键,感觉和过去的绑定差不多。
Button每按一次,都会在names中加一条同样的数据nick: name
4)window1.xaml 前台












可以看到前台具体数据段是怎么绑定的:
<TextBox Text="{Binding Path=Name}" />
<ListBox ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True" />
IsSynchronizedWithCurrentItem="True"确保了DockPanel中的TextBox 与ListBox 数据是同步的。但是这样子ListBox中的数据得到的都是同样的字符串
namespace.Nickname——同过去的数据绑定机制,缺少模板,要改写成这样:
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<TextBlock TextContent="{Binding Path=Name}" />:
<TextBlock TextContent="{Binding Path=Nick}" />
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这一节没有讲ListBox中3行初始数据是从哪里以及如何加载的——将在1.8节详细讨论。
补充:
因为<TextBox Text="{Binding Path=Name}" /> 可以改写为
TextBox.Text>
<Binding Path="Name" />
</TextBox.Text>
从而等价于下列后台代码:
Binding binding = new Binding( );
binding.Path = "Name";
textbox1.Text = binding.ProvideValue(textbox1, TextBox.TextProperty);
WPF笔记(1.6 数据绑定)——Hello,WPF!的更多相关文章
- WPF笔记1 用VS2015创建WPF程序
使用WPF创建第一个应用程序.实现功能如下: 单击"Red"按钮,文本显示红色:单击"Black"按钮,文本显示黑色:单击"Back"按钮, ...
- WPF笔记一
笔记内容: BUG.WPF运行窗体时调用Hide()方法,然后再Show()异常的解决方案 WPF 窗体设置为无边框 选择本地文件 选择文件夹 WPF实现右下角弹出消息窗口 WPF 显示 HTTP 网 ...
- WPF笔记(2.8 常用的布局属性)——Layout
原文:WPF笔记(2.8 常用的布局属性)--Layout 这一节老没意思,啰里啰唆的尽是些HTML的属性,挑几个好玩的List出来,备忘:Padding与Margin的区别:Margin指控件边界与 ...
- WPF笔记(2.9和2.10)——Layout
原文:WPF笔记(2.9和2.10)--Layout 2.9讲的是,如果内部设定超过容器大小,怎么办?StackPanel会裁剪越界部分DockPanel和Grid会智能判断,从而决定换行. 2.10 ...
- WPF笔记(2.7 文字布局)——Layout
原文:WPF笔记(2.7 文字布局)--Layout 这一节介绍的是文字布局的几个控件:1.TextBlock 最基本的文字控件可以配置5个Font属性.TextWraping属性,&quo ...
- WPF笔记(2.5 Canvas)——Layout
原文:WPF笔记(2.5 Canvas)--Layout Canvas是最精确的布局容器--绝对定位,此书作者不建议使用,以为控件的大小一般会随着内部字体图片的动态生成而自动变化,所以使用前三种布局是 ...
- WPF笔记(2.6 ViewBox)——Layout
原文:WPF笔记(2.6 ViewBox)--Layout 在Canvas外面包一层ViewBox,可以使Canvas内的控件填充整个ViewBox,并随着ViewBox的大小变化而同步变化,这是因为 ...
- WPF笔记(2.4 Grid)——Layout
原文:WPF笔记(2.4 Grid)--Layout 第一章已经简单介绍过这个容器,这一节详细介绍.Grid一般是用表格(Grid.Row 和Grid.Column )的,比StackPanel更细致 ...
- WPF笔记(2.2 DockPanel)——Layout
原文:WPF笔记(2.2 DockPanel)--Layout 读完了这一节,发现DockPanel就是过去winform中的Dock属性.原来的Dock属性是子控件设置,而其父亲级别不用设置.现在W ...
随机推荐
- Hibernate框架增删改查
package cn.happy.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org ...
- web前端之 JS
JavaScript概述 JavaScript是一门编程语言,简称js,由浏览器编译并运行,JS说白了就是让页面能够动起来 js存在形式 1.在html页面中 <script> alert ...
- js记录用户行为浏览记录和停留时间(转)
演示地址:http://weber.pub/demo/160902/test.html 测试源码下载:http://pan.baidu.com/s/1nvPKbSP 密码:r147 解决问题所使用的知 ...
- High bridge, low bridge(离散化, 前缀和)
High bridge, low bridge Q:There are one high bridge and one low bridge across the river. The river h ...
- Number of Parallelograms(求平行四边形个数)
Number of Parallelograms time limit per test 4 seconds memory limit per test 256 megabytes input sta ...
- AFNetwork 作用和使用方法具体解释
转自:http://www.maxiaoguo.com/clothes/269.html AFNetworking是一个轻量级的iOS网络通信类库.它建立在NSURLConnection和NSOper ...
- vs2013中国集
在TOOLS的菜单条下的最后一项.进去后在输入框输入Language.按Enter.选择语言,然后确定就可以. 如图 假设没有点击下拉框底下的链接 就会调挑转到语言包下载界面 下载须要的语言就可以, ...
- BOOST 线程完全攻略 - 结束语
modulethread扩展多线程破解通讯 全文介绍了3个boost::thread的扩展类,希望能给大家书写多线程代码带来便捷. thread -> controlled_module_ex ...
- [core java学习笔记][第十一章异常断言日志调试]
第11章 异常,断言,日志,调试 处理错误 捕获异常 使用异常机制的技巧 使用断言 日志 测试技巧 GUI程序排错技巧 使用调试器 11.1 处理错误 11.1.1异常分类 都继承自Throwable ...
- Ubuntu自定义命令
回到主文件夹 $ cd ~ 建立.bash_aliases $ touch .bash_aliases $ vim .bash_aliases 在此文件中加入一句话: alias cdlauncher ...