当数据源所包含的类型实现 INotifyPropertyChanged 接口时, BindingSource 组件将自动检测数据源中的更改,并在更改属性值时引发 PropertyChanged 事件。 此功能非常有用,因为绑定到 BindingSource 的控件随后可以随着数据源值的更改而自动更新。
1、定义Person类,并定义属性;
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.ComponentModel; 6 7 namespace _0401 8 { 9 class Person 10 { 11 public string Name { get; set; } 12 public int Age { get; set; } 13 } 14 }
2、创建Person类的实例,并给属性赋值。
1 Person p1 = new Person(); 2 Person p2 = new Person(); 3 4 private void Window_Loaded(object sender, RoutedEventArgs e) 5 { 6 p1.Name = "张三"; 7 p1.Age = 31; 8 txtName.DataContext = p1; 9 txtAge.DataContext = p1; 10 }
3、在XMAL中将控件绑定已经定义的属性,把控件的Text属性绑定到其DataContent指向对象的属性上。
1 <Window x:Class="_0401.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 Title="主界面" Height="350" Width="525" WindowStartupLocation="CenterScreen" 5 WindowState="Maximized" ResizeMode="CanMinimize" Loaded="Window_Loaded"> 6 <Grid Name="grid1"> 7 <TextBox Name="txtName" Text="{Binding Name}" Height="23" HorizontalAlignment="Left" Margin="78,39,0,0" VerticalAlignment="Top" Width="120" /> 8 <TextBox Name="txtAge" Text="{Binding Age}" Height="23" HorizontalAlignment="Left" Margin="82,84,0,0" VerticalAlignment="Top" Width="120" /> 9 <Label Content="姓名" Height="28" HorizontalAlignment="Left" Margin="21,39,0,0" Name="label1" VerticalAlignment="Top" /> 10 <Label Content="年龄" Height="28" HorizontalAlignment="Left" Margin="21,79,0,0" Name="label2" VerticalAlignment="Top" /> 11 <Button Content="Age++" Height="23" HorizontalAlignment="Left" Margin="218,37,0,0" Name="btnAddAge" VerticalAlignment="Top" Width="75" Click="btnAddAge_Click" /> 12 <Button Content="显示年龄" Height="23" HorizontalAlignment="Left" Margin="218,84,0,0" Name="btnAgeShow" VerticalAlignment="Top" Width="75" Click="btnAgeShow_Click" /> 13 </Grid> 14 </Window>
4、实现接口
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.ComponentModel; 6 7 namespace _0401 8 { 9 class Person:INotifyPropertyChanged 10 { 11 public string Name { get; set; } 12 13 private int age; 14 public int Age 15 { 16 get{ return age;} 17 set 18 { 19 this.age = value; 20 if (PropertyChanged != null) 21 { 22 PropertyChanged(this,new PropertyChangedEventArgs("Age")); 23 } 24 } 25 } 26 27 public event PropertyChangedEventHandler PropertyChanged; 28 } 29 }
浙公网安备 33010602011771号