异步数据绑定

使用同步数据绑定时, 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 2007-01-31 09:21  stswordman  阅读(710)  评论(0编辑  收藏  举报