2010-08-20 80 views
0

有什麼辦法可以暫停窗口上的所有綁定,或者在運行時暫停整個程序中的所有綁定?暫停整個窗口的綁定?

我有一個名爲Page的類,它包含很多我的控件綁定到的變量,以便更新並由類更新。我有一個加載XML文件並從中創建一個Page類的加載函數。問題是,因爲這樣,所有的數據綁定都試圖同時進行更新,導致調度程序大量減速。這使得它可能異步運行,因爲代碼可能異步運行,由於所有綁定更新都繼續,UI仍然凍結。

無論如何暫停或凍結所有的綁定,然後解凍?

+0

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

回答

4

您可以實現抑制更改通知上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