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事件,並且會彈出對話框來顯示更改了那個屬性。