千家信息网

怎样进行Wpf 数据绑定

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,怎样进行Wpf 数据绑定,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前言:数据绑定的基本步骤:(1)先声明一个类及其属
千家信息网最后更新 2026年11月01日怎样进行Wpf 数据绑定

怎样进行Wpf 数据绑定,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

前言:

数据绑定的基本步骤:

(1)先声明一个类及其属性

(2)初始化类赋值

(3)在C#代码中把控件DataContext=对象;

(4)在界面设计里,控件给要绑定的属性{Binding 绑定类的属性}

原理:监听事件机制,界面改变有TextChanged之类的事件,所以改变界面可以同步修改到对象

想让普通对象实现数据绑定,需要实现INotifyPropertyChanged接口才能监听ProperChanged。具体代码如下显示:

class Person:INotifyPropertyChanged     {         private int age;           public int Age         {             get             {                 return age;             }             set             {                 this.age = value;                 if (PropertyChanged != null)                 {                    PropertyChanged(this,                        new PropertyChangedEventArgs("Age"));                 }             }         } }

BindingMode枚举值

名称说明
OneWay当源属性变化时更新目标属性
TwoWay当源属性变化时更新目标属性,当目标属性变化时更新源属性
OneTime最初根据源属性设置目标属性,其后的改变会忽略。
OneWayToSource与OneWay类型相似,但方向相反。
Default此类绑定依赖于目标属性

UpdateSourceTrigger

名称说明
Default默认值,与依赖属性有关
Explicit必须在显示地调用BindingExpression.UpdateSource的情况下才更新源。
LostFocus控件失去焦点的时候更新源值
PropertyChanged绑定的目标值改变时更新。

实例运行后界面如下:

MainWindow.xaml

                                                                                                                                                                                                                                                                                                                                                                                                    

首先解释下C#中的Task.Delay()和Thread.Sleep()

  1. 鸿蒙官方战略合作共建--HarmonyOS技术社区

  2. Thread.Sleep()是同步延迟,Task.Delay()是异步延迟。

  3. Thread.Sleep()会阻塞线程,Task.Delay()不会。

  4. Thread.Sleep()不能取消,Task.Delay()可以。

  5. Task.Delay()实质创建一个运行给定时间的任务,Thread.Sleep()使当前线程休眠给定时间。

  6. 反编译Task.Delay(),基本上讲它就是个包裹在任务中的定时器。

  7. Task.Delay()和Thread.Sleep()最大的区别是Task.Delay()旨在异步运行,在同步代码中使用Task.Delay()是没有意义的;在异步代码中使用Thread.Sleep()是一个非常糟糕的主意。通常使用await关键字调用Task.Delay()。

  8. 我的理解:Task.Delay(),async/await和CancellationTokenSource组合起来使用可以实现可控制的异步延迟。

MainWindow.xaml.cs

using System; using System.Collections.ObjectModel; using System.ComponentModel; using System.Threading.Tasks; using System.Windows;  namespace WpfApp1 {     ///      /// MainWindow.xaml 的交互逻辑     ///      public partial class MainWindow : Window     {         public ObservableCollection stuList;         public MainWindow()         {                      InitializeComponent();             this.DataContext = new Student() { Name="111", Id =1 };             Task.Run(async() =>  //开启异步线程task             {                 await Task.Delay(3000); //延时3秒                 Dispatcher.Invoke((Action)delegate //线程中主界面显示需要用委托,不然这次赋值,在界面不更新                 {                     this.DataContext = new Student() { Name = "222", Id = 2 };                 });             });                       this.DataContext = new Student() { Name = "333" , Id = 3 };         }          private void BtnCtrl1_Click(object sender, RoutedEventArgs e)         {             Student stu = new Student() { Id = 4, Name = "Jon", Age = 29 }; //实例化一个Student类 并给类成员赋值             this.DataContext = stu;//将实例化得对象传给DataContext         }         private void BtnCtrl2_Click(object sender, RoutedEventArgs e)         {             ObservableCollection stuList = new ObservableCollection() //具有通知属性的list             {              new Student() { Id=5, Name="Tim", Age=29 },              new Student() { Id=6, Name="Tom", Age=28 },              };             this.listBox1.ItemsSource = stuList;              this.listBox2.ItemsSource = stuList;             this.listBox2.DisplayMemberPath = "Name";             this.DataContext = stuList;         }     }     public class Student : INotifyPropertyChanged  //创建一个继承自INotifyPropertyChanged的类Student     {          private string name;          public string Name         {             get { return name; }             set             {                 name = value;                 if (this.PropertyChanged != null)                 {                     PropertyChanged(this, new PropertyChangedEventArgs("Name")); //给Name绑定属性变更通知事件                 }             }         }          private int id;          public int Id         {             get { return id; }             set             {                 id = value;                 if (this.PropertyChanged != null)                 {                     this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Id"));//给Id绑定属性变更通知事件                 }             }         }          private int age;          public int Age         {             get { return age; }             set             {                 age = value;                 if (this.PropertyChanged != null)                 {                     this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Age"));//给Age绑定属性变更通知事件                 }             }         }          public int ID { get; internal set; }          public event PropertyChangedEventHandler PropertyChanged;     } }

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

属性 更新 界面 目标 事件 代码 对象 线程 数据 实例 控件 变化 同步 延迟 运行 任务 名称 时间 C# 帮助 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司简介 互联网是不是新科技 朗新科技与工业互联网 互联网 科技创新 友谊互联网络科技 伴你行互联网科技有限公司 互联网科技的未来发展 互联网科技公司有哪些 金融科技和互联网金融 智腾互联网科技有限公司 语蝶互联网科技有限公司 晓花互联网科技有限公司网址 洛阳共同富裕互联网科技有限公司 互联网行业科技股 广东工业互联网大赛深圳学泰科技 张召忠谈中国互联网科技 抖集互联网科技技术咨询 陕西彩京云互联网科技有限公司 恒生互联网科技趋势 互联网 科技节活动 微视频大赛 上海挚品互联网科技有限公司 深圳齐家互联网科技 火传媒上海互联网科技 滨湖区互联网智能科技产品供应 华中科技有哪些互联网大佬 互联网科技产品 语蝶互联网科技有限公司 深圳无忧互联网科技 黑云互联网科技有限公司 半导体行业属于互联网高科技类吗
0