首先还是那句话,我不是大牛,这些只是简单的记录一下学习的过程,没有太多面向对象和设计模式的思维,只偏基础,不喜莫笑;个人观点如果有不足之处,还望多多指教!由于学的不是太深入这里大多数是面向控件和开发介绍;以使快速了解和开发

知道了怎么布局还得会把程序的数据绑定显示出来,这样才能完成整个程序!!

这节就来一起交流下win8 metro应用的简单的一些数据绑定,不涉及设计模式和面向对象;

其实基本的绑定和web 开发和winfrom开发感觉没什么太大的区别

提到数据绑定要介绍一个绑定模式

OneTime:一次绑定,绑定创建时使用源数据更新控件。(可以是普通的set、get属性)。

OneWay (默认值):单向绑定,在绑定创建时使用源数据更新控件,当源数据发生变化的时候也更新控件。(必须实现INotifyPropertyChanged接口或者继承自DependencyObject)。相当于Eval

TwoWay:双向绑定,数据源的变化会更新控件,控件的变化也会更新到数据源。相当于Bind吧(呵呵我做东西是没怎么用到这个)

1.微软提供的绑定,可以做到数据源变化界面自动跟着数据源一起发生辩护,如果双向更可以做到界面变化数据源同时也跟着变下,也不用转换很方面,微软内部实现好了。

<TextBox Text=”{Binding Path=UserName}”/><TextBox Text="{Binding ElementName=sliderOneTimeDataSource, Path=Value, Mode=OneTime}" …/>

以上代码中,第一行通过使用Binding标记扩展的Path属性将UserName绑定到元素对象TextBox的Text依赖属性中,使文本内容在运行时动态显示到客户端
而第二行代码使用Binding标记扩展中EelementBinding(对象元素绑定)功能,绑定对象sliderOneTimeDataSource.Value到TextBox的Text属性中,使文本内容在滑动条内容改变时,TextBox内容同步改变。 
2.把model数据源赋值DataContext
数据上下文对象
可以把数据源,赋给控件的dataContext对象,控件有了数据源就可以像上面那样绑定
{Binding 数据源的属性}
绑定到需要的之上
注意:1.binding相当于DataContext,如果使用集合数据源控件如ListViewer等这他的数据源要赋给 dataItemSource然后再绑定;当然如果你不嫌麻烦完全可以这样ListViewer.DataContext=list;
然后再xaml中在dataItemSource="{Binding}"2.数据上下文绑定后  子空间共享父控件大数据上下文,当然子控件如果单独定义了data这优先级这个就不用说了大家都懂;这个和路由事件的冒泡相反冒泡对外吐它向下去;
如果不指定路径,则表示值绑定到DataContext的值
也可以通过ElementName来按照带name的元素设定绑定源,但是不会影响其他属性,也不会继承给子元素。

3.如果需要数据源变控件跟着改变则注意(必须实现INotifyPropertyChanged接口或者继承自DependencyObject).来给数据源一个事件,控件监听这个事件来获知变化进行重新绑定,(metro不支持DependencyObject)silverlight wpf wp7 在编辑器中点击右键→插入代码段→NETFX30→定义一个DependencyProperty依赖属性,而metro废弃了依赖属性的事件通知INotifyPropertyChanged所以老老实实用它吧
4.如果是集合的话泛型集合也不行也得实现INotifyPropertyChanged

4,数据绑定的Converter

之前文本框的Text属性是string类型,也能双向绑定,这是因为有值转换器。
比如想把Model中的true,false绑定的到ProgressBar的Visibility属性上就需要他了
先需要定义转换器类,转换器要实现IValueConverter接口,很简单一个回去的一个绑定的就是名字吓人点其实就是类型转换

示例代码:

 Book book = new Book();book.Name = "比科员";book.Price = 30;this.DataContext = book;<TextBlock Height="23" HorizontalAlignment="Left" Margin="26,12,0,0" Name="textBlock1" Text="{Binding Name}" VerticalAlignment="Top" /><TextBox Height="23" HorizontalAlignment="Left" Margin="99,12,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" Text="{Binding Price}" />

扯了半天太抽象还是看例子吧

效果

2.

  <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Hidden"><ListView x:Name="dataListView" ItemClick="OnItemCilck" IsItemClickEnabled="True" SelectionChanged="dataListView_SelectionChanged" ><ListView.ItemTemplate><DataTemplate><StackPanel Orientation="Vertical" Width="300" Height="200"><Rectangle Height="3" Width="9" Fill="Red"></Rectangle><Rectangle Height="1" Width="300" Fill="Red"></Rectangle><TextBlock x:Name="title" Text="{Binding title, Mode=TwoWay}" TextWrapping="Wrap" FontSize="30"></TextBlock><TextBlock Visibility="Collapsed" x:Name="body" TextWrapping="Wrap" Text="{Binding body, Mode=TwoWay}"></TextBlock></StackPanel></DataTemplate></ListView.ItemTemplate><ListView.ItemsPanel><ItemsPanelTemplate><WrapGrid Orientation="Vertical"  MaximumRowsOrColumns="3"></WrapGrid></ItemsPanelTemplate></ListView.ItemsPanel></ListView></ScrollViewer>

后台代码就一句:

 this.dataListView.ItemsSource = this.o;

如果要想双向通知如

如如果内容太多或者从网络资源加载过来的话想加载一部分先显示出来,或者点击按钮再显示一部分的话这是就得把list集合实现INotifyPropertyChanged

不过还有个比较生省事的解决方法就是ObservableCollection这个泛型集合微软给我们实现了INotifyPropertyChanged事件我们可以拿来直接应用,而且他实现了IList和list的用法基本一样很好用,这样让你的程序更加人性化

win8/Metro开发系列二 Xaml数据绑定相关推荐

  1. android 原生开发 3d地图 下载_arcgis api 3.x for js 入门开发系列二不同地图服务展示(附源码下载)...

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  2. 短信开发系列(二):GSM手机短信开发之短信解码

    短信开发系列目录: 短信开发系列(一):GSM手机短信开发初探 短信开发系列(二):GSM手机短信开发之短信解码 短信开发系列(三):短信接收引擎 昨天写了短信的发送,今天我们在来谈谈如果读取SIM卡 ...

  3. 微信小程序开发系列二:微信小程序的视图设计

    大家如果跟着我第一篇文章 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 一起动手,那么微信小程序的开发环境一定搭好了.效果就是能把该小程序的体验版以二维码的方式发送给其他朋友使用. 这个系列 ...

  4. WordPress版微信小程序开发系列(二):安装使用问答

    自WordPress版微信小程序发布开源以来,受关注的程度超过我原来的想象.这套程序主要面对的用户是wordpress网站的站长,如果wordpress站想在微信的生态圈得到推广,小程序成为一种重要的 ...

  5. BizTalk开发系列(二十三) BizTalk性能指标参考

    更多内容请查看:BizTalk动手实验系列目录                       BizTalk 开发系列 BizTalk项目目前比较少,使用的客户也不多.大多只知道BizTalk是一个不错 ...

  6. leaflet-webpack 入门开发系列二加载不同在线地图切换显示(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载 webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 ...

  7. ionic云开发系列二之调用webservice

    Part 1:怎么访问后台呢 在上一篇文章 ionic云开发系列一 已经介绍了在云上搭建ionic框架了,如果你还不知道怎么搭建ionic本地开发环境, 请移步ionic Getting Starte ...

  8. BizTalk开发系列(二十二) 开发自定义Map Functoid

    更多内容请查看:BizTalk动手实验系列目录                       BizTalk 开发系列 尽管 BizTalk Server 提供许多Functoid以支持一系列不同的操作 ...

  9. BizTalk开发系列(二十九) 宏的使用

    更多内容请查看:BizTalk动手实验系列目录                       BizTalk 开发系列 在BizTalk中可以使用宏集合动态的让BizTalk发送处理程序使用单独的值来替 ...

最新文章

  1. python 归一化_只需 45 秒,Python 给故宫画一组手绘图!
  2. 自己写的一个启动JBoss服务器的bat批处理
  3. UI控件库分享:DWZ(j-UI)、LigerUI、Linb
  4. H3C 多区域MSTP配置
  5. C++中一个容易被忽视的名字查找规则
  6. Hadoop源代码eclipse编译指南
  7. java导出excel多个sheet_java导出Excel多个工作表(添加多个sheet)
  8. python开发【基础二】
  9. 快捷方便的对js文件进行语法检查。
  10. NPOI自定义单元格背景颜色
  11. VS2017设置C++标准
  12. 以太坊虚拟机 EVM(3)交易流(FISCO BCOS为例)
  13. 路由交换复习选择题题库
  14. 基于Docker搭建RabbitMQ集群(多台服务器)
  15. android6.0 power按键深入分析
  16. com.android.phone已停止运行怎么解决方法,com.android.phone进程意外停止/已停止运行的原因及解决方法...
  17. 小猫咪能有什么坏心思呢?只是想要你带它回家啦~
  18. 电子邮件注册网站是什么,163电子邮件注册流程详解
  19. 游戏策划入门(5)——开始绘制系统的结构流程图
  20. 从某一点出发沿任意一方向旋转矩阵计算思考与实现

热门文章

  1. 【BLE MIDI】开发 BLE MIDI 硬件电子乐器设备需要遵循的相关规范 ( 资料收集 )
  2. 【算法】快速选择算法 ( 数组中找第 K 大元素 )
  3. 【Android 应用开发】Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值 数组
  4. Python语言的程序结构
  5. pci枚举初始化部分(2)
  6. new Map的妙用
  7. BZOJ-1012[JSOI2008]最大数maxnumber 线段树区间最值
  8. Codeforces Round #256 (Div. 2) D Multiplication Table
  9. mongodb first
  10. 自问自答:在VB中如何实现像C++一样printf的功能