概念就不说了,直接将用法
数据绑定有 数据源Source,和目标Target,还有一个转换器Converter,把数据源通过转换器绑定到目标上,转换器是转换数据源的格式
分为单向绑定OneWay,双向绑定TwoWay,一次绑定OneTime
首先演示一下,把Slider控件的Value绑定到TextBlock控件的文字上,这样就可以通过Slider控制文本框的文本内容了
<Slider Height="84" Name="slider1" Width="399" Maximum="100" Minimum="20" /> <TextBlock Name="textBlock1" Text="{Binding ElementName=slider1, Path=Value, Mode=TwoWay}" />
上面代码是吧 slider1的Value属性绑定到textBlock1控件的Text属性上
但是有个问题,这个数据位数太长了,我们希望把这个数值进行处理后在显示出来,比如,我们只显示整数值,不要这么长的浮点数
接下来我们要用到转换器 Converter,这个转换器可以我们自己定义,这样就可以通过它来控制数值的显示了,下面将用法
首先,定义一个转换器类,这个类继承于接口 IValueConverter ,这个接口需要实现两个函数 Convert 和 ConverterBack
public class MyValueConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { double doubleValue = (double)value; return (int)doubleValue; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return value; } }
然后,在数据绑定的时候设置Converter,先把MyValueConverter设置成资源(也可以设置成全局资源App.xaml,这里设置成页面资源)
<phone:PhoneApplicationPage.Resources> <local:MyValueConverter x:Key="valueConverter" /> </phone:PhoneApplicationPage.Resources>
<TextBlock Name="textBlock1" Text="{Binding ElementName=slider1, Path=Value, Mode=TwoWay, Converter={StaticResource valueConverter}}" />
把传入的double值转化为int ,然后返回,这样textBlock1显示出来的值就是整数的了
再说一下绑定模式Mode,这个很好理解,就不废话了
OneTime 只绑定一次
OneWay 单向绑定
TwoWay 双向绑定
接下来说说给页面绑定数据,和数据源的定义
首先,我们定义一个自己的数据源Person
public class Person:INotifyPropertyChanged { string _name; int _age; public Person(string name, int age) { this._name = name; this._age = age; } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(PropertyChangedEventArgs e) { if (PropertyChanged != null) { PropertyChanged(this, e); } } public string Name { get { return _name; } set { _name = value; OnPropertyChanged(new PropertyChangedEventArgs("Name")); } } public int Age { get { return _age; } set { _age = value; OnPropertyChanged(new PropertyChangedEventArgs("Age")); } } }
数据源需要继承接口:INotifyPropertyChanged,该接口是实现向客户端(一般是执行绑定的客户端)发出属性更改的通知,不然属性后是不会直接更新到绑定端的
定义事件 public event PropertyChangedEventHandler PropertyChanged;
定义通知函数 protected void OnPropertyChanged(PropertyChangedEventArgs e)
在属性改变时调用通知函数 OnPropertyChanged(new PropertyChangedEventArgs("Name"));
有了数据源,接下来是绑定到页面
在页面构造函数中
public MainPage() { InitializeComponent(); Person p = new Person("bomo", 20); this.DataContext = p; }
在xaml文件中用两个TextBlock控件绑定该数据
<TextBlock Height="30" Name="textBlock1" Text="{Binding Name}" /> <TextBlock Height="30" Name="textBlock2" Text="{Binding Age}" />
好了,这就实现了数据源的定义和数据的绑定