Binding基础
XAML:
<Window x:Class="Text.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="WPF Test" WindowStartupLocation="CenterScreen" Height="110" Width="300">
<StackPanel>
<TextBox x:Name="textBoxName" BorderBrush="Black" Margin="5"/>
<Button Content="Add Age" Margin="5" Click="Button_Click"/>
</StackPanel>
</Window>
后台代码:
public class Student : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string name;
public string Name
{
get { return name; }
set
{
name = value;
if (null != PropertyChanged)
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name"));
}
}
}
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
Student stu;
public MainWindow()
{
InitializeComponent();
stu = new Student();
Binding binding = new Binding();
binding.Source = stu;
binding.Path = new PropertyPath("Name");
BindingOperations.SetBinding(this.textBoxName, TextBox.TextProperty, binding);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
this.textBoxName.Clear();
stu.Name += "Name ";
}
}
Binding的数据源是对象,一个对象上可能有很多数据,这些数据通过属性暴露给外界。UI上的元素关心的那个属性成为Binding的路径(Path)。Binding是一种自动机制,当值变化后要有能力通知Binding,让Binding把变化传递给UI元素,达到此目的的方法是在属性的Set语句中激发一个PropertyChanged事件,此时需要让作为数据源的类实现System.ComponentModel名称空间中的INotifyPropertyChanged接口。当为Binding设置了数据源后,Binding就会自动侦听来自这个接口的PropertyChanged事件。
Binding binding = new Binding();声明Binding类型变量并创建实例;
Binding binding = new Binding();为Binding实例指定数据源;
binding.Path = new PropertyPath("Name");为Binding指定访问路径;
把数据源和目标连接在一起的任务使用BindingOperations.SetBinding(...)来完成。
Binding的源就是数据的源头。只要是一个对象,并且通过属性(Property)公开自己的数据,它就能作为Binding的源。