Silverlight数据绑定引擎

 

 

1Silverlight中数据绑定基于Silverlight数据绑定引擎

2)该绑定引擎实现从UI元素CLR源数据对象之间的关联,创建并维护两者之间的数据通道。

3)通过该绑定引擎,将CLR源数据对象包含的数据反映到UI元素,并可以将UI中对数据的更改反馈回源数据对象。

 

一次数据绑定包含两个最基本的要素:

 

(1)       绑定目标(FrameworkElement依赖项属性

(2)       绑定源(对象的属性)

 

 绑定源

即数据的来源,可以是任意的CLR对象,通常实际需要的是该对象的某一个特定属性.

绑定目标

显示数据的UI元素,可以是任何FrameworkElement类型的对象,实际绑定的也是该对象的某一个特定属性

绑定模式

主要决定数据流的方向,可以是单向双向

值转换器

需要时用以进行数据类型或格式的转换

 

绑定引擎所属的这些信息,主要有 System.Windows.Data 中的 Binding 对象来提供。

 

以下是Binding对象的几个重要属性:

 

 

1path

指定绑定源对象中用以提供数据的属性,通过属性路径语法来表示

2Mode

指示数据绑定模式,可以为OneTimeOneWayTwoWay

3Converter

值转换器对象,需要时设置,必须是一个IValueConverter接口类型的对象

4)设置绑定源

有四种方法:

1、  Source:表示绑定源对象。

2、  RelativeSource:通过指定绑定源相对于绑定目标的位置来标识绑定源

3、  ElementName:当绑定源也是UI对象时,获取或设置其名称用以标识绑定源

4、  通过设置UI元素的DataContext属性来指定绑定源,上下文的表示方法

绑定目标通过UI元素的SetBinding方法来进行设置(当然也可以在XAML中直接指定)。

  三种模式的数据绑定。

 

OneTime

单向一次绑定,在绑定创建时使用源数据更新目标,适用于只显示数据而不进行数据的更新(只在绑定创建时更新一次数据源,之后绑定目标的显示将与绑定源的变化无关)

OneWay

单向绑定,在绑定创建时或者源数据发生变化时更新到目标,适用于显示变化的数据(绑定创建时及之后绑定源的每一次变化都会更新绑定目标。)

TwoWay

双向绑定,在任何时候都可以同时更新源数据和目标。(数据在绑定源与绑定目标之间可相互流动,源与目标任一方的变化都会立即通知到对方并引发对方的更新,双方是实时同步的。)

注意:当选择OneWayTwoWay模式时,为了是绑定源的变化能实时通知到绑定目标,源对象中必须实现INotifyPropertyChanged接口。也就是绑定目标的显示与绑定源同步,必须满足两个条件:

(1)       选择OneWayTwoWay模式

(2)       绑定源实现INotifyPropertyChanged接口

public class Employee:INotifyPropertyChanged

{


/*public int Number { get; set; }   //员工号

public string Name { get; set; }  //姓名

public string Sex { get; set; }    //性别

public int BirthYear { get; set; } // 出生年份*/

public event PropertyChangedEventHandler PropertyChanged;


private int number;

public int Number

{

get { return number; }

set

{

this.number = value;

INotifyPropertyChanged("Number");

}

}


private string name;

public string Name

{

get { return name; }

set

{

this.name = value;

INotifyPropertyChanged("Name");

}

}


//sex birthYear相同代码

private void INotifyPropertyChanged(string propertyName)

{

//throw new NotImplementedException();

if (PropertyChanged != null)

{

PropertyChanged(this,new PropertyChangedEventArgs(propertyName));

}

}

}