2016-04-02 5 views
0

В моем главном окне, у меня естьWPF и пользовательский интерфейс сублимационной

  • навигации TreeView на левом
  • ведущего контента на право
  • какой-то пожалуйста, подождите панель (с шириной и высотой приблизительно 50), который отображает загрузочный гиф; видимость этой панели привязана к объекту mymodel bool IsBusy моего главного окна.

Идея показывает эту панель, когда инициализируется презентатор содержания.


Выбор элемента в TreeView:

  1. устанавливает BOOL свойство IsBusy к истинным (таким образом ожидания панель с GIF показывает загрузки)
  2. устанавливает выступающему контента

Чтобы инициализировать этот контент, я использую задачу в моей модели основного окна, чтобы пользовательский интерфейс оставался отзывчивым. В рамках этой задачи, когда мне нужно обновить пользовательский интерфейс, я использую Application.Current.Dispatcher.BeginInvoke для управления моим потоком пользовательского интерфейса. Таким образом, моя загрузка gif воспроизводится гладко, когда задача обрабатывается в другом потоке.


Теперь, скажем, у меня есть DataGrid с двадцатью колоннами в моем контенте ведущего, который привязываться к ObservableCollection в моей основной ViewModel. В моей задаче, если я добавлю 1000 элементов в эту коллекцию, когда пользовательский интерфейс обновится, чтобы отобразить содержимое, он перестанет отвечать на несколько десятых секунды и мой gif-стоп; в основном пользовательский интерфейс замерзает.

Как я могу обеспечить, чтобы панель ожидания всегда оставалась отзывчивой, и gif продолжает играть гладко?

ответ

0

Хорошо, все, что мне нужно было сделать, это создать контент-презентацию в другом потоке, а затем назначить результат моему презентатору контента после того, как все будет сделано (например, в bgw RunWorkCompleted).