有什麼辦法可以暫停窗口上的所有綁定,或者在運行時暫停整個程序中的所有綁定?暫停整個窗口的綁定?
我有一個名爲Page的類,它包含很多我的控件綁定到的變量,以便更新並由類更新。我有一個加載XML文件並從中創建一個Page類的加載函數。問題是,因爲這樣,所有的數據綁定都試圖同時進行更新,導致調度程序大量減速。這使得它可能異步運行,因爲代碼可能異步運行,由於所有綁定更新都繼續,UI仍然凍結。
無論如何暫停或凍結所有的綁定,然後解凍?
有什麼辦法可以暫停窗口上的所有綁定,或者在運行時暫停整個程序中的所有綁定?暫停整個窗口的綁定?
我有一個名爲Page的類,它包含很多我的控件綁定到的變量,以便更新並由類更新。我有一個加載XML文件並從中創建一個Page類的加載函數。問題是,因爲這樣,所有的數據綁定都試圖同時進行更新,導致調度程序大量減速。這使得它可能異步運行,因爲代碼可能異步運行,由於所有綁定更新都繼續,UI仍然凍結。
無論如何暫停或凍結所有的綁定,然後解凍?
您可以實現抑制更改通知上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
一旦完成。
謝謝,這很完美。 – 2010-08-20 12:43:39
你將如何處理用'ObservableCollection <>'暫停綁定?你會使用不同的集合對象並手動處理更改以便能夠評估標誌/布爾值嗎? – rdoubleui 2011-02-20 14:00:02
您使用MV-VM嗎? – 2010-08-20 11:29:28