前言:数据绑定的基本步骤:(1)首先声明一个类及其属性(2)初始化类赋值(3)在C#代码中设置控件DataContext=object;(4)在界面设计中,控件赋予要绑定的属性{绑定类的Binding属性}。绑定,需要实现INotifyPropertyChanged接口来监听ProperChanged。具体代码如下:}}}BindingMode枚举值名称说明OneWay当源属性发生变化时更新目标属性TwoWay当源属性发生变化时更新目标属性,当目标属性发生变化时更新源属性OneTime根据源属性初始设置目标属性,随后的更改将被忽略。OneWayToSource类似于OneWay类型,但方向相反。Default这种类型的绑定取决于目标属性UpdateSourceTrigger名称DescriptionDefault默认值,相对于依赖属性Explicit仅当显式调用BindingExpression.UpdateSource时才必须更新源。LostFocus当控件失去焦点时更新源值。PropertyChanged绑定目标值更改时更新。实例运行后界面如下:MainWindow.xaml先解释一下C#中的Task.Delay()和Thread.Sleep()Thread.Sleep()是同步延时,Task.Delay()是异步延时Thread.Sleep()会阻塞线程,Task.Delay()不会。Thread.Sleep()无法取消,Task.Delay()可以。Task.Delay()本质上是创建一个运行给定时间的任务,而Thread.Sleep()使当前线程在给定时间内休眠。反编译Task.Delay(),基本上就是一个包裹在任务中的定时器。Task.Delay()和Thread.Sleep()最大的区别是Task.Delay()被设计为异步运行,在同步代码中使用Task.Delay()是没有意义的;在异步代码中使用Thread.Sleep()是一个非常糟糕的主意。通常使用await关键字调用Task.Delay()。我的理解:Task.Delay()、async/await和CancellationTokenSource可以结合起来实现可控的异步延迟。MainWindow.xaml.csusingSystem;usingSystem.Collections.ObjectModel;usingSystem.ComponentModel;usingSystem.Threading.Tasks;usingSystem.Windows;namespaceWpfApp1{//////MainWindow.xaml的交互逻辑///publicpartialclassMainWindow:Window{publicObservableCollectionstuList;publicMainWindow(){InitializeComponent();this.DataContext=newStudent(){Name="111",Id=1};Task.Run(async()=>//开启异步线程task{awaitTask.Delay(3000);//延迟3秒Dispatcher.Invoke((Action)delegate//线程中的主界面显示需要使用delegate,否则本次赋值不会更新界面{this.DataContext=newStudent(){Name="222",Id=2};});});this.DataContext=newStudent(){Name="333",Id=3};}privatevoidBtnCtrl1_Click(objectsender,RoutedEventArgse){Studentstu=newStudent(){Id=4,Name="Jon",Age=29};//实例化一个Student类,并为类成员赋值this.DataContext=stu;//将实例化的对象传递给DataContext}privatevoidBtnCtrl2_Click(objectsender,RoutedEventArgse){ObservableCollection<学生>stuList=newObservableCollection<学生ent>()//list{newStudent(){Id=5,Name="Tim",Age=29},newStudent(){Id=6,Name="Tom",Age=28}带通知属性,};this.listBox1.ItemsSource=stuList;this.listBox2.ItemsSource=stuList;this.listBox2.DisplayMemberPath="Name";this.DataContext=stuList;}}publicclassStudent:INotifyPropertyChanged//创建一个继承自INotifyPropertyChanged的类Student{privatestringname;publicstringName{get{returnname;}set{name=value;if(this.PropertyChanged!=null){PropertyChanged(this,newPropertyChangedEventArgs("Name"));//给Name绑定属性变化通知事件}}}privateintid;publicintId{get{returnid;}set{id=value;if(this.PropertyChanged!=null){this.PropertyChanged.Invoke(this,newPropertyChangedEventArgs("Id"));//绑定属性变化通知到Id事件}}}privateintage;publicintAge{get{returnage;}set{age=value;if(this.PropertyChanged!=null){this.PropertyChanged.Invoke(this,newPropertyChangedEventArgs("Age"));//绑定到Age指定的属性变化通知事件}}}publicintID{get;internalset;}publiceventPropertyChangedEventHandlerPropertyChanged;}}本文转载自微信公众号《CSharp编程大全》,转载文章可通过以下二维码关注,转载请联系CSharp编程大全公众号。