博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
silverlight 学习笔记 (三): silverlight中的数据绑定
阅读量:7040 次
发布时间:2019-06-28

本文共 2473 字,大约阅读时间需要 8 分钟。

在前面的笔记中讲过了在silverlight中作为UI层只负责界面的展示,而与ViewModel的联系是通过绑定方式,其绑定可以是数据的绑定也可以是事件的绑定。那么我们需要了解下究竟在UI中绑定的实现。

一、绑定语法

绑定可以在设计时绑定也可以在后台绑定,通常我们在设计时进行绑定,数据绑定语法是: 属性=“{Binding 类属性,Mode=绑定方式}”,如下:

<TextBox name="txUserid" Height="21" TextWrapping="Wrap" DataContext="{Binding Source={StaticResource UserDataSource}}" Text="{Binding UserInfo.UserID, Mode=OneWay}"/>

当然在silverlight中除了与实体类的属性绑定外还支持元素间属性的绑定,即一个控件的属性绑定另一个控件的属性如:<TextBlock Text="{Binding Text.Length, ElementName=txUserid}" />

二、绑定方式

在Silverlight ,支持OneTime、OneWay、TwoWay三种形式的数据绑定。

简单的说:
OneTime模式下:控件与数据绑定后,能自动显示数据,一旦显示完成后,这二者就没有任何关联了。(即自动解除绑定)
OneWay模式下:控件与数据绑定后,除自动显示数据外,显示完成后,控件与数据源仍有单向关联,即如果数据源以后发生了变化,控件上的值也会自动变化.
TwoWay模式下:控件与数据源的关联是双向的,即数据源的变化会影响控件上的值,反过来控件上的任何值变化也会影响数据源本身发生变化。
实际开发中,我们的数据源通常不会是某一个现成控件的属性,多半是xml/数据库等对应的实体类,这里要注意的是,如果控件与自定义类绑定,
自定义类必须实现INotifyPropertyChanged接口

在MVVM模式中由于View从ViewModel中提取数据所以ViewModel类必须从INotifyPropertyChanged接口继承而来,通常ViewModel中会定义一个或多个Model类的实体公布给View,所以Model类也将从INotifyPropertyChanged接口继承。这样才能保障数据源的变化与UI控件上值的变化进行及时更新。

需要提醒的是在silverlight中的UI的更新是在控件失去焦点后发生的。

三、事件绑定

在silverlight中除了能将UI控件中的属性进行数据绑定外,还可以将UI控件中的事件进行绑定。在MVVM模式中,ViewModel将会向View暴露所有Vew要用到的事件属性,而这些事件属性都将继承ICommand接口。其实现方式如下:

1、在Viewmodel中公布事件属性

public ICommand UpdateDataCommand { get; set; } public ICommand LoadDataCommand { get { return new Common.DelegateCommand(LoadData); } } 2、事件初始化:事件初始化往往是在ViewModel构造函数中定义

public User() { this.UpdateDataCommand = new Common.DelegateCommand(UpdateData); }此处的Common.DelegateCommand类是实现了ICommand接口的类

3、定义事件处理函数

public void LoadData(object param) { this.UserInfo = Model.User.LoadData(); }此处的事件处理方法中的参数类型为object类型,即可以接入所有类型的事件参数,在实际应用中我们往往需要传递某个类的实例作为事件处理函数的参数

4、在UI中定义事件绑定

<Button x:Name="button" Content="加载数据" HorizontalAlignment="Left" Margin="97,166,0,112" Width="83" Command="{Binding LoadDataCommand, Mode=OneWay}" DataContext="{Binding Source={StaticResource UserDataSource}}"/>如上,可以将Button的command事件绑定到ViewModel中公布的事件属性LoadCommand上,另外一种事件绑定方式是利用行为模式进行绑定如下代码,其实现与上面一致。

<Button x:Name="button" Content="加载数据" HorizontalAlignment="Left" Margin="97,166,0,112" Width="83"> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <i:InvokeCommandAction Command="{Binding LoadDataCommand, Mode=OneWay}"/> </i:EventTrigger> </i:Interaction.Triggers> </Button>

以上介绍了silverlight中基本的数据绑定方式,由此可以看出在silverlight中绑定是如此灵活和强大,这也为MVVM模式将UI设计与后台逻辑分离的实现变得更为简单了,如果一个好的MVVM应用模式将会在View中不用写一行后置代码就能实现所有应有的功能。下面精彩还将继续!

转载于:https://www.cnblogs.com/oldkingsir/archive/2011/09/01/2365634.html

你可能感兴趣的文章
浙数文化携手阿里云拓展云计算服务
查看>>
《机器学习与数据科学(基于R的统计学习方法)》——1.9 数据集
查看>>
【重磅】Facebook开源机器视觉工具,从像素点中发现规律
查看>>
《敏捷软件开发:原则、模式与实践(C#版.修订版)》一2.3 参考文献
查看>>
Oracle 数据库灾难性环境下恢复实例
查看>>
《D3.js数据可视化实战手册》——导读
查看>>
《Ember.js实战》——第1章 发力雄心勃勃的Web应用 1.1 Ember.js适用场景
查看>>
《循序渐进学Spark》一第2章
查看>>
使用Clonezilla对硬盘进行镜像和克隆
查看>>
《Spring MVC学习指南(第2版)》——2.4 模型2之Filter分发器
查看>>
移动App性能测评与优化1.1 新手入门
查看>>
《JavaScript框架设计》——2.2 加载器所在路径的探知
查看>>
《iOS组件与框架——iOS SDK高级特性剖析》——第6章,第6.5节小结
查看>>
《ANTLR 4权威指南 》一第3章 入门的ANTLR项目
查看>>
该用什么心态,去面对不喜欢的工作?
查看>>
《Docker生产环境实践指南》——2.4 配置管理
查看>>
《R绘图系统(第2版)》一2.2 plot()函数
查看>>
创业18般武器之ICP许可证过审秘籍
查看>>
利用APT实现Android编译时注解
查看>>
spring 4.0.2.RELEASE 自动化装配
查看>>