Wpf MVVM Load UI управляет асинхронно - PullRequest
1 голос
/ 07 июля 2011

У меня есть приложение mvvm wpf, которое загружает окно, состоящее из множества элементов управления за один раз. Я хочу, чтобы это окно загружало элементы управления отдельно и асинхронно.

Есть предложения?

Ответы [ 2 ]

2 голосов
/ 07 июля 2011

В этом отношении я использую шаблон Singleton.Если вы знакомы с PRISM и его Bootstrapper, это немного похоже.

Основная идея здесь - переопределить метод OnStartup в вашем App.xaml.Поведение по умолчанию отображается в xaml StartupUri="MainWindow.xaml", вам придется удалить это свойство.

В методе переопределения OnStartup я использую класс, который создает все мои объекты (Views, ViewModels, link DataContexts)...) и запускает событие, когда инициализация завершена.

В это время я закрываю заставку и показываю полностью загруженное приложение (InitializeComponent вызывается при создании MainWindow, поэтомубыть уже вызванным в это время).

Для более расширенного использования вы можете добавлять события в свои окна и EventHandler s в свой класс начальной загрузки.Я использую его, например, когда я хочу полностью обновить свое приложение (перезагрузить его), а также для запросов к базе данных (которые, в моем случае, выполняются только при запуске приложения для загрузки референции).

Надеюсь, что этопомогло:)

0 голосов
/ 07 июля 2011

К сожалению, если ваши элементы управления определены в XAML, они будут инициализированы вызовом InitializeComponent и пройдут процесс загрузки.Все события при загрузке окна XAML происходят независимо от того, подписаны вы на них или нет.

Вы можете динамически добавлять элементы управления в форму в коде, но если у вас есть отдельный поток, выполняющий работу, вам потребуетсяиспользовать методы Application Dispatcher CheckAccess и Invoke, чтобы убедиться, что элементы управления загружены в принадлежащем им потоке.

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