Мое приложение WPF организовано как TabControl с каждой вкладкой, содержащей различный экран.
Один TabItem связывается с данными, которые берут некоторое время для загрузки. Так как этот TabItem представляет экран, который могут только редко использовать пользователи, я хотел бы не загрузить данные, пока пользователь не выбирает вкладку.
Как я могу сделать это?
Элемент управления вкладкой работает двумя способами,
Использование 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.
Вы можете посмотреть на событие SelectionChanged
:
Оно будет вызываться при изменении выбранной вкладки; в зависимости от того, создаются ли ваши вкладки через привязку к коллекции или нет (это работает лучше всего, если "нет"), это может быть просто создание экземпляра UserControl
, содержащего все элементы управления, которые вы хотите для страницы, затем добавление его в какую-нибудь Panel
(например, Grid
), которая существует в качестве заполнителя на этой вкладке.
Надеюсь, это поможет!