WPF之数据绑定
界面是很简单的两个Label和两个TextBox组成,用来显示一个Student类的两个属性。
界面如下:
<Window x:Class="数据模板.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:数据模板"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center">
<StackPanel Orientation="Horizontal">
<Label Name="nameLb" Content="Name:" FontSize="20"/>
<TextBox Name="nameTxb" Width="400" Height="30" BorderBrush="LightBlue"
BorderThickness="3" Padding="3" Background="White" Text="{Binding Name, Mode=TwoWay}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label Name="AgeLb" Content="Name:" FontSize="20"/>
<TextBox Name="AgeTxb" Width="400" Height="30" BorderBrush="LightBlue"
BorderThickness="3" Padding="3" Background="White" Text="{Binding Age}"/>
</StackPanel>
</StackPanel>
</Grid>
</Window>
后台代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace 数据模板
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public static int count = 1;
Student stu;
public MainWindow()
{
InitializeComponent();
stu = new Student();
this.DataContext = stu;
// 准备绑定
//Binding binding = new Binding();
//binding.Source = stu;
//binding.Path = new PropertyPath("Name");
使用Binding链接数据源与目标UI
//BindingOperations.SetBinding(this.nameTxb,TextBox.TextProperty, binding);
}
}
public class Student : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Name属性
/// </summary>
private string name;
public string Name
{
get { return name; }
set
{
name = value;
if(PropertyChanged!=null)
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name"));
MessageBox.Show($"stu的Name属性变成了{value}");
}
}
/// <summary>
/// Age属性
/// </summary>
private string age;
public string Age
{
get { return age; }
set
{
age = value;
if (PropertyChanged != null)
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Age"));
MessageBox.Show($"stu的Age属性变成了{value}");
}
}
public Student()
{
this.Name = "hhh";
this.Age = "23";
}
}
}
效果如下:
每次在用户界面给任何一个属性重新赋值都会引发PropertyChanged事件,并且会弹出对话框来显示更改了那个属性。