暂停整个窗口的绑定?
有什么办法可以暂停窗口上的所有绑定,或者在运行时暂停整个程序中的所有绑定?暂停整个窗口的绑定?
我有一个名为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