Hello SilverLight 4(写给初学者的SilverLight教程)第三章

SilverLight4中的数据服务(1)

[size=18px][/size]

第二章咱们学习了控件,通过布局控件咱们也能创建一个程序界面了,相当的方便吧?有同学问SilverLight是做什么用的,好问题,在学习以前我也很迷茫SilverLight是做什么用的,不过咱们可以比个赛,做一个商业网站的主页,我相信我使用SilverLight创建页面的速度一定比你使用HTML快很多,稳定很多,这就是一个好处。
不管你的程序界面有多漂亮,效果有多出众,没有数据的交互它只能算是一个展示程序,并没有太大的商业价值,人们上网往往是来获取信息的,一个不能及时提供信息的网站不能算一个合格的网站。

一个温度计
下面要通过一个温度计的例子来讲一下什么是数据绑定,有基础的同学可以跳过这一节哦。温度计大家一定不陌生,一个温度计往往会通过一个水银(或酒精)柱来指示当前的温度。随着温度的变化,其所指示的温度值也随之变化,这说明水银(或酒精)柱已经和温度值绑定了,这时,你将不需要再去动温度计,温度计会自动的更新新的温度,也就是说,绑定象会随着被绑定对象的变化而变化,这就是数据绑定。同时,温度计的这个例子还是一个单向(One Way)绑定的好例子,所谓的单向绑定,就是指水银(或酒精)柱会随着温度的改变而改变,但是,温度却不会随着水银(或酒精)柱的改变而改变,如果你将温度计放入热水中,水银(或酒精)柱会迅速的升高,但是现实中的温度是不会改变的,因为这向绑定。
相对的,还有双向(Two Way)绑定,绑定的双方任何一方改变,另一方也将随之改变,这就是双向绑定。

回到SilverLight中
好了,我们可以回来了,在SilverLight中,有三种数据绑定方式

一次性绑定
如果你的程序有个功能是读取操作系统的版本号的话,那么可以考虑一次性绑定,因为诸如操作系统版本号这类的数据一般情况下是不会改变的,在应用程序生命周期中只绑定一次的绑定叫做一次性绑定。

单向绑定
像上面的温度计这样的例子,就是单向绑定。

双向绑定
这种绑定方式主要是用于“更新”之类的操作,我在一个TextBox中输入新的值用于取代数据库中的旧值。

绑定数据
前面的文字已经不少了,我想大家也迫不急待的想看一下研究是如何操作的了吧。

绑定数据
在SilverLight中绑定数据实事上并非绑定数据本身,而是绑定“属性”,对于SilverLight这样的新事物来说,不支持“属性”绑定才是令人奇怪的,因为这种技术已经广泛的应用到各种程序设计当中了,所谓的“属性”,也就是我们所说的Model数据模型。
下面我们要建立一个表示系统信息的数据模型,也就是一个类,上面说了,系统信息的可变性非常的小所以我们使用一次性绑定。咱们把这个类起名叫MachineInfo,它可以存储当前机器.NET版本信息和SilverLight的当前版本信息。
右键单击项目名称会出现下图所示



选择NewItem,在弹出的对话框中选择Class,在下面的文本框中输入类名MachineInfo,最后点击Add。



然后我们开始添加代码
namespace Chapter3
{
public class MachineInfo 
  { 
  public MachineInfo() 
  { 
//获取当前操作系统的信息
  Platform = System.Environment.OSVersion.Platform.ToString(); 
//下面的if语句获取SilverLight版本信息,不必关注细节
  if (Chapter3.App.Current.Host.IsVersionSupported("4.0.41108.0")) 
  { 
  SLVersion = "4.0.41108.0"; 
  } 
  else 
  { 
  SLVersion = "Not Latest"; 
  } 
  } 
  public string Platform { get; set; } 
  public string SLVersion { get; set; } 
  public void Setup() 
  { 
  } 
}

哇,好多!不过别担心,其实最重要的只有蓝色的代码而已,其它的代码只是为这两个属性赋值而已,这样我们的Model类就已经写好了,当然你可以自己增加更多的属性。虽然定义起来有那么一点点的麻烦,但是一旦定义好了,你将得到一个可重复利用的,与数据访问无关的Model。

一次性绑定实践
我们要得到如下效果



当然,这些数据在不同的机器上显示是不同的,这就是数据绑定的好处。通过前面的学习,我想大家应该知道怎么创造一个类似于上面的界面了吧?我相信你们。
我们为第一个TextBox命名为tb_Platform第二个命名为tb_SLVersion。
因为控件是由XAML来描述的所以为了在TextBox控件上做手脚(绑定数据)我们需要修改一下XAML(这有点麻烦,我承认,但SL在发展,说不定下个版本就会有改善呢)
在XAML头部的名称空间中添加一个我们创建的Model的名称空间

xmlns:local="clr-namespace:Chapter3"

紧接着添加我们的Model类名,这样我们就可以在XAML中使用Model类了

<UserControl.Resources> 
  <local:MachineInfo x:Key="MachineInfo" /> 
</UserControl.Resources>

别高兴,还没完呢
然后在设计视图选中tb_Platform,在右边的属性面板中Text属性标签上点击右键出现下图



选择ApplyDataBinding出现下图



注意力不要被下面的红叉给吸引了,选择StaticResource出现下图



选择MachineInfo(上图中没有选中),这样我们的资源就选好了,如果没有前面在XAML中的改动,那么这些个选项就可能不会出现,当前我们只定义了一个类MachineInfo。
最后一步了,找到下面的Path标签,点击出现下图,选择与当前TextBox控件相应的属性



这两个属性就是我们之前定义好的属性,可见,XAML已经把数据给映射出来了,这都得归功于我们这前的那几行XAML代码。
最最后(- -),选择下面的Options标签出现下图,在Mode中选择OneTime一次性绑定,这下就OK了,大家注意,我没写任何后台代码哦。

posted @ 2010-11-25 10:38  董雨  阅读(1011)  评论(3编辑  收藏  举报