Ленивое содержание вкладки WPF загрузки

Мое приложение WPF организовано как TabControl с каждой вкладкой, содержащей различный экран.

Один TabItem связывается с данными, которые берут некоторое время для загрузки. Так как этот TabItem представляет экран, который могут только редко использовать пользователи, я хотел бы не загрузить данные, пока пользователь не выбирает вкладку.

Как я могу сделать это?

25
задан yclevine 18 July 2010 в 06:57
поделиться

2 ответа

Элемент управления вкладкой работает двумя способами,

  1. Когда мы добавляем элементы вкладки явно, каждый элемент вкладки загружается и инициализируется немедленно, содержащий все элементы.
  2. Когда мы привязываем ItemsSource к списку элементов и устанавливаем разные шаблоны данных для каждого элемента данных, элемент управления вкладкой создает только одно представление «Содержимое» для выбранного элемента данных, и только когда элемент вкладки выбран, «Загружен» событие просмотра содержимого будет запущено, и содержимое будет загружено. И когда выбран другой элемент вкладки, событие «Выгружено» будет запущено для ранее выбранного представления содержимого, а «Загружено» будет запущено для нового выбранного элемента данных.

Использование 2-го метода немного сложно, но во время выполнения он, безусловно, уменьшит используемые ресурсы, но во время переключения вкладок это может быть немного медленнее на какое-то время.

Вы должны создать собственный класс данных, как показано ниже

class TabItemData{
   public string Header {get;set;}
   public string ResourceKey {get;set;}
   public object MyBusinessObject {get;set;}
}

И вы должны создать список или массив TabItemData, и вы должны установить источник элементов TabControl в список / массив TabItemData.

Затем создайте ItemTemplate для TabControl как свойство "Заголовок" привязки шаблона данных.

Затем создайте ContentTemplate для TabControl как шаблон данных, содержащий ContentControl с ContentTemplate ключа ресурса, найденного в свойстве ResourceKey.

17
ответ дан 28 November 2019 в 21:22
поделиться

Вы можете посмотреть на событие SelectionChanged:

http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.selector.selectionchanged. aspx

Оно будет вызываться при изменении выбранной вкладки; в зависимости от того, создаются ли ваши вкладки через привязку к коллекции или нет (это работает лучше всего, если "нет"), это может быть просто создание экземпляра UserControl, содержащего все элементы управления, которые вы хотите для страницы, затем добавление его в какую-нибудь Panel (например, Grid), которая существует в качестве заполнителя на этой вкладке.

Надеюсь, это поможет!

2
ответ дан 28 November 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: