三种绑定模式:one time(一次性绑定) oneway(单向绑定,model变 Ui变;Ui变 model不变) twoway(双向绑定,model变 Ui变;Ui变 model变)
两个控件之间的简单绑定
第一步:在xaml文件中
在需要绑定的控件中加入:此控件的属性=“{Binding Path=另一个控件的属性,Mode=One Time/OneWay/TwoWay,ElementName=控件的名字}”
例如: Text="{Binding Path=Value,Mode=TwoWay,ElementName=slider1}"
对象的绑定
第一步:封装一个对象
//实现一个借口,监听发生改变
public class Person:INotifyPropertyChanged
{ private string _name; public string Name { get { return _name; } set { _name = value; //值发生改变 //如果值(自己)发生改变,则发出事件,让绑定的控件改变 if (PropertyChanged != null) { //new PropertyChangedEventArgs("Name"),说明那个属性发生变化 PropertyChanged(this,new PropertyChangedEventArgs("Name") ); } } } private int _age; public int Age { get { return _age; } set { _age = value; if (PropertyChanged != null) { //new PropertyChangedEventArgs("Name"),说明那个属性发生变化 PropertyChanged(this, new PropertyChangedEventArgs("Age")); } } } //监听事件:告知对方自己发生变化,使对方做出改变 public event PropertyChangedEventHandler PropertyChanged; }第二步:在.cs文件中
1、声明对象:private Person p = new Person() {Name="dfdffdfd",Age=23 };
2、在OnNavigatedTo方法中,加上
if (e.NavigationMode == NavigationMode.New) { //首次进入此页面,此时可以加载数据 txt1.DataContext = p;//子控件会自动继承父控件的数据源。
//如果某个控件的间接父控件(爷爷控件)和直接父控件都定义了数据源,则此控件的数据源使用直接父控件的数据源
// this.DataContext = p;
}3、响应事件
private void Button_Click_1(object sender, RoutedEventArgs e)
{
MessageDialog msg = new MessageDialog(p.Name);
msg.ShowAsync();
}
private void Button_Click_2(object sender, RoutedEventArgs e)
{
p.Name = DateTime.Now.Millisecond.ToString();
}
第三步:在XAML文件中绑定
Text="{Binding Name ,Mode=TwoWay}" //将一个控件的text属性 绑定到数据源的 Name属性