首页 > 代码库 > silverlight教程 silverlight 数据绑定
silverlight教程 silverlight 数据绑定
以往为了做wtt测试,曾经写过一个sample 的WPF application.对于silverlight的了解,仅限于是web 版的WPF。。。。。
关于silverlight,以前也做过一个sample,但仅仅是拖动一些控件到页面上,无任何其他功能。
今天做的这个silverlight程序,相当于把培训的内容重新复习了一遍,包含两个内容:
1. silverlight 简单数据绑定。
2.silverlight 4 新增的ICommand 接口的使用。
3.silverlight 中简单的automation 的实现。
关于topic1:
silverlight实现了view和model的分离,可以使页面设计者和程序员分开工作。如何实现呢?
silverlight控件例如 textblock,textbox,listbox等等,都可以和程序中的某个属性,进行绑定。
当程序员构建了一个class以后,在前端xaml文件的相应控件标签中加入 Text={Binding PropertyName}
例如:
public class sampleclass { private string text = "Hello World"; public string Text { get{return text;} set{text=value;} } }
前端xaml
<TextBlock x:Name="HelloText" Text={Binding Text}>
这样就实现了将TextBlock中的Text和一个类中的属性进行绑定;
当然,还需要给TextBlock指定一个数据上下文datacontext(因为也许在你的众多类中,都有一个叫做Text的属性,那么程序怎么知道应该绑定哪个class或者哪个数据对象的Text呢,这里的datacontext就是起到这个作用)
可以在页面Intialize的时候指定this.DataContext = new sampleclass();
也可以在xaml文件中用resource标签中指定,还有很多其他的制定方法,这里暂不讨论;
这里还涉及到一个BindMode的问题,一共有三种OneTime,OneWay, TwoWay.
OneTime 指一次绑定,无论属性有没有发生变法,前台的现实都是不会改变的;
OneWay 指在绑定过程中,如果后台的属性发生改变,会直接在前台显示出来;
TwoWay 指在绑定过程中,前后台可以交互,相互影响;
在实现OneWay和TwoWay的时候,需要注意的是包含属性的对象,需要实现INotifyPropertyChanged
也就是通知系统属性的变化,具体代码:
public class simpleclass:INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private string text = "Hello World"; private Command _saveCommand = null; public string Text { set { text = value; OnPropertyChanged("Text"); } get { return text; } } protected void OnPropertyChanged(string value) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(value)); } }
关于topic2:
在silverlight以往的版本中,还无法实现对事件的直接绑定,在silverlight4中,可以实现对事件的绑定只要实现了ICommand接口,具体方法如下:
public class Command : ICommand { public event EventHandler CanExecuteChanged; Predicate<object> _canExecute = null; Action<object> _excuteAction = null; public Command(Predicate<object> canExecute, Action<object> excuteAction) { _canExecute = canExecute; _excuteAction = excuteAction; } public bool CanExecute(object parameter) { if (_canExecute != null) return _canExecute(parameter); return true; } public void Execute(object parameter) { if (_excuteAction != null) _excuteAction(parameter); if (CanExecuteChanged != null) CanExecuteChanged(this, new EventArgs()); } } </object>在simpleclass中加入方法<br> public class simpleclass: INotifyPropertyChanged<br> {<br> ........<br> private Command _saveCommand;<br> //实现具体的方法<br> public Command SaveCommand<br> {<br> get<br> {<br> if(_saveCommand == null)<br> _saveCommand = new Command<br> (<br> p => true,<br> p => Text = "Hello World Changed!!"<br> );<br> return _saveCommand;<br> }<br> }<br> }<br> xaml中<br> <TextBlock x:Name="HelloText" Text="{Binding Text}" Command = "{Binding SaveCommand}"><br> 这样就实现了command的绑定 <p></p> <p> <br> 原文地址:http://www.itmmd.com/201410/68.html <br> 该文章由 <a href=http://www.mamicode.com/"http://www.itmmd.com" disabled="true">萌萌的IT人 整理发布,转载须标明出处。>原文地址:http://www.itmmd.com/201410/68.html
该文章由 android开发 整理发布,转载须标明出处。。silverlight教程 silverlight 数据绑定
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。