WP7数据绑定

简介:

WP7数据绑定

基本描述:

         基于silverlightwindows phone数据绑定,它提供了一种数据显示并与数据进行交互的简便方法,UI元素和数据对象之间的绑定使得数据可以在两者之间进行流动,绑定建立之后,如果数据出现更改,则绑定到该数据的UI元素会自动反映更改,同样,用户在UI元素中所做的更改也可以在数据对象中反映出来,它的基本过程如图:

 

         •绑定目标是UI控件,控件必须是FrameworkElement的任何一个DependencyProperty(提供快速的方法计算值,可与其他动态数据交互)。

•绑定来源是将要与绑定目标进行数据交互的数据。来源可以是任何运行于CLR的对象,包括目标元素本身或者其他UI元素。

         •绑定的语法用大括号表示

                  <TextBlock Text="{Binding Note}"/>等同于<TextBlock Text="{Binding path= Note}"/>

         •三种数据流方向:(Mode属性):

OneTime:一次绑定,在绑定创建时使用源数据更新目标,适用于只显示数据而不进行数据的更新。

OneWay:单向绑定,在绑定创建时或者源数据发生变化时更新到目标,适用于显示变化的数据。

TwoWay:双向绑定,在任何时候都可以同时更新源数据和目标。

                      其中默认的是OneWay,即后台数据发生变化,前台建立了绑定关系的相关控件也会进行更新

具体过程:

下面我们就针对于LIstBox控件来说明一下绑定的具体实现过程,参考代码如下:

1.       定义数据实体

可以直接定义一个字符串数组,可以新建一个实体类,创建一个该类的对象数组,也可以将实体直接写到AppResource中,这个可以根据实际需要,对于比较大的项目建议采用后面两种方法,这样便于以后对项目进行维护,这里面写的是一个简单的实体类


 
 
  1. public class Item  
  2.  
  3. {  
  4.         public ImageSource Img { setget;}  
  5.         public string EventType { setget;}  
  6.         public string Note { setget; }  
  7. }  
  8.  

2.     *.xmal中利用Binding对象设置数据绑定

我们还可以给ListBox指定列表项的模板ItemTemplate,让它显示的比较整齐美观

 


 
 
  1. <ListBox Height="595" HorizontalAlignment="Left" Margin="0,6,0,0" Name="listBox1" VerticalAlignment="Top" Width="460" >  
  2.  
  3.     <ListBox.ItemTemplate>  
  4.  
  5.           <DataTemplate>  
  6.  
  7.                <StackPanel Orientation="Horizontal">  
  8.  
  9.                       <Image  Height="84" Source="{Binding Img}" Width="81" HorizontalAlignment="Left" VerticalAlignment="Top" />   <!—通过Image的Source属性将上面定义的数据实体Img绑定到Image上-->  
  10.  
  11.                 <StackPanel Orientation="Vertical">  
  12.  
  13.                     <TextBlock Text="{Binding EventType}" FontSize="48"  VerticalAlignment="Top" />   <!—通过TextBlock的Text属性将上面定义的数据实体EventType绑定到TextBlock上-->                       
  14.  
  15.                     <TextBlock Text="{Binding Note}" FontSize="24"  VerticalAlignment="Center" />     <!—同上,通过TextBlock的Text属性将上面定义的数据实体Note绑定到TextBlock上-->  
  16.  
  17.                 </StackPanel>  
  18.  
  19.             </StackPanel>        
  20.  
  21.         </DataTemplate>                  
  22.  
  23.      </ListBox.ItemTemplate>                   
  24.  
  25. </ListBox>            
  26.  

3.     后台*.xmal.cs中定义数据源:


 
 
  1. public partial class MainPage : PhoneApplicationPage  
  2.  
  3.     {  
  4.  
  5.         // Constructor  
  6.         public MainPage()  
  7.  
  8.         {   
  9.             InitializeComponent();  
  10.         }  
  11.  
  12.         private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)  
  13.  
  14.         {  
  15.  
  16.             List<Item> list=new List<Item>();//创建一个Item的对象集合  
  17.   
  18.             Item item=new Item();           
  19.             item.Img = new BitmapImage(new Uri("ic_sleep.png", UriKind.Relative));   
  20.             item.EventType = "sleep";  
  21.             item.Note = "9:00~10:30";   
  22.             list.Add(item);  
  23.   
  24.             item = new Item();   
  25.             item.Img = new BitmapImage(new Uri("ic_breastfed.png", UriKind.Relative));   
  26.             item.EventType = "breastfed";  
  27.             item.Note="10:40~10:55";  
  28.             list.Add(item);  
  29.   
  30.             item=new Item();   
  31.             item.Img = new BitmapImage(new Uri("ic_diaper.png", UriKind.Relative));  
  32.             item.EventType = "Diaper";  
  33.             item.Note = "Haha";  
  34.             list.Add(item);   
  35.  
  36.             item = new Item();  
  37.             item.Img = new BitmapImage(new Uri("ic_growth.png", UriKind.Relative));  
  38.             item.EventType = "Growth";  
  39.             item.Note = "Happy";  
  40.             list.Add(item);
  41.  
  42.             listBox1.ItemsSource = list;  //将list集合中的数据对象添加到ListBox控件的对应的列表项中  
  43.  
  44.         }  
  45.  
  46.     }  
  47.  
  48. }  
  49.  

运行效果:

说明:

         Windows Phone开发中大部分控件都可以实现数据绑定,在使用Binding对象将数据源与UI控件进行数据绑定之前,建议大家在大致了解绑定过程的基础上,首先熟悉一下各个控件的相关属性及使用方法,这样可能会使代码更加简洁,同时也应该掌握一下页面布局的设计,使数据显示的效果更加Nice。大家可以自己先写一个简单的小例子来实现数据绑定,了解绑定的大致过程之后,然后逐渐向周围的其他控件进行扩展。目前我自己也是一个WP7的初学者,学习过程中在这里只是小小总结一下,希望不对的地方大家多多给予指正~~




本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/695154,如需转载请自行联系原作者

 

相关文章
|
5天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
306 116
|
20天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
7天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
504 45
Meta SAM3开源:让图像分割,听懂你的话
|
14天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
695 222
|
2天前
|
Windows
dll错误修复 ,可指定下载dll,regsvr32等
dll错误修复 ,可指定下载dll,regsvr32等
137 95
|
12天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1711 158
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
953 62