数据绑定提供了一种数据呈现与交互的简捷方式,使得数据与UI分离,并能自动更新、同步。
绑定有绑定目标、绑定源、绑定模式、转换器等要素。。
绑定目标为Silverlight控件,可以是FrameworkElement类型的对象,实际上绑定的是该控件的一个特定属性。
绑定源为数据对象,也可以是任意的CLR对象。
转换器:进行数据类型或格式的转换。
绑定模式,三种模式的数据绑定。
( 1)OneTime:一次绑定,在绑定创建时使用源数据更新目标,适用于只显示数据而不进行数据的更新。
(2)OneWay:单向绑定,在绑定创建时或者源数据发生变化时更新到目标,适用于显示变化的数据。
(3)TwoWay:双向绑定,在任何时候都可以同时更新源数据和目标。
当模式为OneWay或TwoWay时,源对象必须实现INotifyPropertyChanged接口。
绑定源的方式有:
(1) Source:表示绑定源对象。
(2) RelativeSource,指定绑定源相对于绑定目标的位置来标识绑定源。
(3) ElementName,绑定源也是UI对象。
可以在C#代码中,也可以在XAML声明中进行绑定,现列举常见的几种绑定方式:
(1) 绑定源为UI对象。
通过slider的值来控制矩形控件图形的宽度。

Mode默认为OneWay, “Path=”也可可省略,因此上式还可简写为:
(2) C#代码中实现绑定
定义数据源:
Public class Classmate
{
public string cName{get;set;}
public int cAge{get;set;}
}
创建同学类的实例作为绑定源:
Public Classmate myClassmate=new Classmate
{
cName=“王根山“,
cAge=”29”
};
Binding bd=new Binding();
Bd.Source= myClassmate;
bd.Path=new PropertyPath(“cName”);
bd.SetBinding(TextBox.TextProperty,cTextBox);
多个控件绑定同一数据源,可统一指定数据源,用DataContext来实现,原数据源赋值语句均可省略。
Canvas1.DataContext= myClassmate;
(3) XAML声明中实现绑定
添加命名空间的支持:
xmlns:local="clr-namespace:WindowsPhoneApplication4"
资源项中实例化类:
在XAML中实现绑定:
也可以如同C#代码中实现绑定,在C#代码中定义数据源:
Canvas1.DataContext= myClassmate;
(4) 使用数据绑定设计器实现绑定
除了C#、XAML来实现绑定,还可借助于Visual Studio的可视化工具,直接实现绑定,实际是XAML实现绑定的可视化方式,自动生成XAML代码。
在属性面板中单击属性右侧的小图标,会弹出菜单,如图4-1所示:
p_w_picpath
图4-1
在弹出菜单中选择Apply Data Binding..,会出现数据绑定设计器,可定义Source、Path等属性,如图4-2:
p_w_picpath
图4-2
案例4-1:数据绑定实现
集合对象的数据绑定,用自定义模板方式实现。
(1)创建Windows Phone程序。
(2)添加新类Classmate
public class Classmate
{
public int cId { get; set; }
public string cName { get; set; }
public int cAge { get; set; }
}
(4) XAML页面绑定代码如下:
(5) 在C#代码中定义数据源:
ObservableCollection classmates=new ObservableCollection
{
new Classmate {cId=1,cName ="王启大",cAge=28},
new Classmate {cId=2,cName ="万正领",cAge=25},
};
public MainPage()
{
InitializeComponent();
listBox1.DataContext = classmates;
}
(6)F5运行,效果如下:
(W)6`R}Z6J)HIJI]0%`RI0F