Приостановить привязки для всего окна? - PullRequest
0 голосов
/ 20 августа 2010

Есть ли способ приостановить все привязки в окне или приостановить все привязки во всей программе во время выполнения?

У меня есть класс с именем Page, он содержит много переменных, с которыми мои элементы управления связываются, чтобы обновлять и обновлять класс. У меня есть функция загрузки, которая загружает файл XML и создает из него класс Page. Проблема заключается в том, что при этом все привязки данных пытаются обновляться одновременно, вызывая значительное замедление работы диспетчера. Это делает адски синхронным выполнение, так как в то время как код может выполняться асинхронно, пользовательский интерфейс все еще зависает из-за всех происходящих обновлений привязки.

Есть ли способ приостановить или заморозить все привязки, а затем разморозить?

1 Ответ

4 голосов
/ 20 августа 2010

Вы можете реализовать механизм блокировки на 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 как только закончите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...