异步数据绑定
使用同步数据绑定时, UI会冻结.wpf中提供了异步形式的数据绑定.这样我们就不必自己开启线程来实现数据的异步绑定了(实际上wpf的异步功能也是开启了一个新的线程)
目前WPF中提供了两种DataProvider
第一种是XmlDataProvider,它本身就是异步的.
第二种是ObjectDataProvider.默认情况下是同步的(synchronal)
目前有两中情况下应当使用异步数据绑定.
1. Slow Data Source .例如调用一个Rss feed,外部的xml文件等
2. Slow property in quick DataSource. 数据源中的某个属性取值时非常缓慢.
第一种情况下可以使用XmlDataProvider或者ObjectDataProvider.
第二种使用下将Binding.IsSync设置为true就可以了(默认为false),当然使用XmlDataProvider或者ObjectDataProvider也可以.
下面用以小段程序来说明:
Slow
Data Source:
public class
SlowDataSouce
{
private
string myVar="tt";
public
string MyProperty
{
get {
return myVar; }
set {
myVar = value; }
}
public
SlowDataSouce()
{
//在生成实例时延迟了3秒钟
System.Threading.Thread.Sleep(3000);
}
}
绑定代码
ObjectDataProvider
odp = new ObjectDataProvider();
odp.IsAsynchronous = true;
odp.DataChanged += new EventHandler(odp_DataChanged);//当ObjectDataProvider的Data属性被赋予新值时引发该事件(也就时SlowDataSource类实例化完毕时)
odp.ObjectType = typeof(SlowDataSouce);
Binding
binding = new Binding("MyProperty");
binding.Source = new class1();
tb1.SetBinding(TextBox.TextProperty, binding);
Slow
Property:
public class SlowDataSouce
{
private
string myVar="tt";
public
string MyProperty
{
get {
//获取该属性时延迟了3秒钟
System.Threading.Thread.Sleep(3000);
return myVar; }
set {
myVar = value; }
}
public
SlowDataSouce()
{
}
}
Binding binding = new Binding("MyProperty");
binding.IsAsync = true;
binding.Source = new SlowDataSouce ();
tb1.SetBinding(TextBox.TextProperty, binding);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现