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 前台
<DockPanel x:Name="dockPanel">
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
<TextBlock VerticalAlignment="Center">Name: </TextBlock>
<TextBox Text="{Binding Path=Name}" />
<TextBlock VerticalAlignment="Center">Nick: </TextBlock>
<TextBox Text="{Binding Path=Nick}" />
</StackPanel>
<Button DockPanel.Dock="Bottom" x:Name="addButton">Add</Button>
<ListBox
ItemsSource="{Binding}"
IsSynchronizedWithCurrentItem="True" />
</DockPanel>可以看到前台具体数据段是怎么绑定的:
<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 ...
随机推荐
- mongodb----pymongo的用法
pymongo是python的一个模块,可能通过sudo pip install pymongo来安装. 导入pymongo import pymongo 创建连接 conn = pymongo.Co ...
- Using HTML5 audio and video
From:https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_HTML5_audio_and_video Using HTML5 ...
- 2016"百度之星" - 资格赛(Astar Round1) 1001
思路:第一个做法就是:每读入起始位置i和结束位置j,就从这位置i到位置j计算,可是TLE了,后面我想想要是我输入一个最长的字符串,且以最大次数计算开始位置1到结束位置100000,那么这计算量是很大的 ...
- Linux SD/MMC/SDIO驱动分析
一.SD/MMC/SDIO概念区分 SD(SecureDigital)与 MMC(MultimediaCard) SD 是一种 flash memory card 的标准,也就是一般常见的 SD 记忆 ...
- iOS 推送证书制作 (JAVA/PHP)
// aps_development.cer 转化成pem openssl x509 -in aps_development.cer -inform der -out PushChatCert.pem ...
- 图的最小生成树(Prim、Kruskal)
理论: Prim: 基本思想:假设G=(V,E)是连通的,TE是G上最小生成树中边的集合.算法从U={u0}(u0∈V).TE={}开始.重复执行下列操作: 在所有u∈U,v∈V-U的边(u,v)∈E ...
- wifi_uplink脚本分析
~ >: vim apps/tools/wifi_uplink #!/bin/sh # Copyright (C) 2012 GuoWenxue <guowenxue@gmail.com ...
- RDBMS 数据库补丁集补丁号码高速參考-文档 ID 1577380.1
保存此文,高速查询补丁号 Oracle Database - Enterprise Edition - 版本号 8.1.7.0 和更高版本号 本文档所含信息适用于全部平台 补丁集/PSU 补丁号码 ...
- hdu 5063 Operation the Sequence(Bestcoder Round #13)
Operation the Sequence Time Limi ...
- 关于Latch
Latch是什么 Latch是SQL Server引擎保证内存中的结构的一致性的轻量同步机制.比如索引,数据页和内部结构(比如非叶级索引页).SQL Server使用Buffer Latch保护缓冲池 ...