5.2 WPF数据绑定简单示例1

发布于:2025-03-28 ⋅ 阅读:(29) ⋅ 点赞:(0)

         数据绑定在WPF中是一个核心概念,含义如下:

         当数据变化时,希望控件的显示内容也跟着变化;反之亦然,比如文本控件修改了内容,也希望变量同步变化,因此需要数据绑定。它允许将UI元素与数据源连接起来。本文档记录这个数据绑定的一种实现过程。

一、实现过程描述

 1.数据类实现INotifyPropertyChanged接口:

    2.在XAML中,使用Binding语法将UI元素绑定到该类的属性;比如:

       TextBox使用双向绑定(UpdateSourceTrigger=PropertyChanged}

   3. 在窗口的代码中,设置DataContext为该数据模型的实例

     这样,当数据变化时(即使是多线程中修改了数据),控件中的显示也会变化。并没有报winform中常见的非UI线程更新UI控件的报警问题。

二、实际代码

  <StackPanel>
      <TextBlock Text="{Binding Name}" FontSize="20" Margin="0,0,0,10"/>
      <TextBox Text="{Binding Name,UpdateSourceTrigger=PropertyChanged}" Margin="0,10,0,10"/>
      <Button x:Name="btnModfiyName" Content="修改名字" Click="btnModfiyName_Click" Padding="10,5"/>
      <Button x:Name="btnThreadModfiyName" Content="线程修改名字" Click="btnThreadModfiyName_Click"/>
  </StackPanel>
 public class Person : INotifyPropertyChanged
 {
     private string _name;
     public string Name
     {
         get => _name;
         set
         {
             _name = value;
             OnPropertyChanged(nameof(Name));               
         }
     }
     public event PropertyChangedEventHandler PropertyChanged;
     protected virtual void OnPropertyChanged(string propertyName)
     {
         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
     }
 }
 
public partial class Window1 : Window
 {
     private Person _person = new Person { Name = "张三" };
     public Window1()
     {
         InitializeComponent();
         DataContext = _person;
     }

   

     private void btnModfiyName_Click(object sender, RoutedEventArgs e)
     {
         _person.Name = "李四";          

     }

     private void btnThreadModfiyName_Click(object sender, RoutedEventArgs e)
     {
         new TaskFactory().StartNew(() =>
         {
             _person.Name = "王五";
         });
     }
 }