三种绑定模式: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属性