暂停整个窗口的绑定?

问题描述:

有什么办法可以暂停窗口上的所有绑定,或者在运行时暂停整个程序中的所有绑定?暂停整个窗口的绑定?

我有一个名为Page的类,它包含很多我的控件绑定到的变量,以便更新并由类更新。我有一个加载XML文件并从中创建一个Page类的加载函数。问题是,因为这样,所有的数据绑定都试图同时进行更新,导致调度程序大量减速。这使得它可能异步运行,因为代码可能异步运行,由于所有绑定更新都继续,UI仍然冻结。

无论如何暂停或冻结所有的绑定,然后解冻?

+0

您使用MV-VM吗? – 2010-08-20 11:29:28

您可以实现抑制更改通知上Page闭锁机构:

public class Page : INotifyPropertyChanged 
{ 
    private bool areNotificationsSuppressed; 

    public IDisposable SuppressNotifications() 
    { 
     return new NotificationSuppression(); 
    } 

    protected virtual void OnPropertyChanged(...) 
    { 
     if (this.areNotificationsSuppressed) 
     { 
      return; 
     } 

     ... 
    } 

    private sealed class NotificationSuppression : IDisposable 
    { 
     // set areNotificationsSuppressed to true, and then false once disposed 
     // queue up any notifications and fire them after disposal 
    } 
} 

或者,你可以只从DataContext删除对象,而你进行更改,然后分配给它回到你DataContext一旦完成。

+0

谢谢,这很完美。 – 2010-08-20 12:43:39

+0

你将如何处理用'ObservableCollection '暂停绑定?你会使用不同的集合对象并手动处理更改以便能够评估标志/布尔值吗? – rdoubleui 2011-02-20 14:00:02