前台绑定后台数据,实时更新
新建一个前台xaml文件(这里已前几篇新建的PageMes页面为例),我们在前台添加一个文本框控件,现在要实现的是将前台TextBox的内容与后台变量进行绑定,当后台数据更新时,前台页面的内容显示也实时更新。
1.第一步,前台PageMes.xaml文件中添加一个TextBox,内容如下:
...
<Button Content="导入文件" Click="ImportFile" BorderThickness="0" />
<TextBox Name="textbox_status" TextAlignment="Right" Text="{Binding Text}"/>
...
Text="{Binding Text}"
将前台TextBox的内容与Text属性绑定了(当前仅指定了TextBox与某实例的Text属性绑定)
2.第二步,后台PageMes.xaml.cs文件对应添加如下内容:
namespace wpfbase {
public partial class PageMes : Page {
private StatusText statustext; // 实例化一个StatusText类成员
public PageMes() {
InitializeComponent();
statustext = new StatusText(); // 初始化类成员
// 将前台名为textbox_status控件的数据绑定为statustext成员
this.textbox_status.DataContext = statustext;
}
...
private void ImportFile(object sender, RoutedEventArgs e) {
Microsoft.Win32.OpenFileDialog dialog = new Microsoft.Win32.OpenFileDialog();
dialog.DefaultExt = ".png";
dialog.Filter = @"图像文件(*.jpg,*.png,*.tif,*.gif)|*jpeg;*.jpg;*.png;*.tif;*.tiff;*.gif
|JPEG(*.jpeg, *.jpg)|*.jpeg;*.jpg|PNG(*.png)|*.png|GIF(*.gif)|*.gif
|TIF(*.tif,*.tiff)|*.tif;*.tiff";
Nullable<bool> result = dialog.ShowDialog();
if(result == true) {
statustext.Text = dialog.FileName; // statustext成员Text更新
}
}
}
...
class StatusText : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
private string text;
public string Text { // 前台Binding的属性值为此处的Text
get { return text;}
set {
text = value;
if (PropertyChanged != null) // 只要StatusText类的成员改变即执行
PropertyChanged(this, new PropertyChangedEventArgs("Text"));
}
}
}
}
说明:
1.我们在wpfbase空间中定义了一个类StatusText继承至INotifyPropertyChanged抽象类,在这个类中,我们定义了一个PropertyChanged事件类型,同时为该类定义了成员Text,当Text成员有变化时,就会触发产生PropertyChanged事件,这样就实现了内容刷新。
2.在PageMes的构造函数中,我们初始化一个StatusText类型的变量statustext,并将该变量与前台textbox_status文本框数据绑定,在第一步中我们已经实现了此文本框的内容绑定数据的Text的属性,所以,textbox_status文本框绑定的是statustext变量的Text属性。
3.在ImportFile函数,statustext.Text = dialog.FileName; 修改statustext成员Text的值,实现对前台数据的实时更新。