随笔 - 229  文章 - 2  评论 - 511  阅读 - 84万

异步数据绑定

使用同步数据绑定时, 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);//ObjectDataProviderData属性被赋予新值时引发该事件(也就时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);

 

posted on   stswordman  阅读(717)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
< 2007年1月 >
31 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
4 5 6 7 8 9 10

点击右上角即可分享
微信分享提示