数据绑定简而言之就是通过绑定数据源的形式,通过控件将数据展示出来。通过相关设置,使控件实现数据驱动,即当数据发生变化时,UI层展示数据同步变化。
包括:
(1)Source,数据源为后台自定义的数据类,要求绑定的属性为公有。
例如,声明数据源实体类(声明一个变量类,包括有压力、温度等属性,这里仅仅包含温度的实现)
namespace DataBinding
{
public class Variable
{
private int temperature;
public int Temperature
{
get { return temperature; }
set{ temperature = value; }
}
}
}
通过后台代码绑定显示
public Page1()
{
InitializeComponent();
Variable v = new Variable();
v.Temperature = 10; //初始温度为10°
Binding binding = new Binding(); //新建一个绑定对象
binding.Source = v; //指定绑定对象的数据源
binding.Path = new PropertyPath("Temperature"); //指定绑定对象的对应属性
BindingOperations.SetBinding(this.progressBar1, ProgressBar.ValueProperty, binding); //将控件的相应属性与绑定对象关联
}
此时可以实现绑定展示数据源的属性值
现在增加功能,加温或降温(温度值有可能内存动态修改,有可能底层数据库中修改,可以利用ServiceBroker实现,另外介绍),客户端实时展现底层数据变化,实现监控功能。
namespace DataBinding
{
public class Variable : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged; // 这个接口仅包含一个事件而已
private int temperature;
public int Temperature
{
get { return temperature; }
set
{
temperature = value;
if (this.PropertyChanged != null)
{
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Temperature")); // 通知UI“Temperature”属性值改变
}
}
}
}
}
通过手动修改temperature的方式,模拟加温和降温
private void button1_Click(object sender, RoutedEventArgs e)
{
v.Temperature += 10;
}
private void button2_Click(object sender, RoutedEventArgs e)
{
v.Temperature -= 10;
}
此时,可以通过数据绑定动态展现底层数据了
(2)ElementName,数据源为控件的依赖属性(可以看成是Source的特例,其数据源类型只能是控件),例如TextBox的字号,绑定到Slider的Value属性
<Label Content="控件元素绑定" FontSize="{Binding ElementName=slider1, Path=Value}" Name="label1" /> 通过标记扩展方式实现
或者
<Label Content="控件元素绑定" Name="label1"> 通过元素属性方式实现,优点是具有智能感知,而扩展方式没有智能感知
<Label.FontSize>
<Binding ElementName="slider1" Path="Value" Mode="OneWay" />
</Label.FontSize>
</Label>