Как обмениваться данными между несколькими представлениями
В Windows 10 UWP можно создать несколько окон (так называемые представления, которые содержат отдельное окно и поток) для одного приложения:
- Показать несколько просмотров для приложения
- Пример нескольких просмотров
- Рекомендации для нескольких окон
Но как правильно делиться данными / объектами между несколькими представлениями в UWP? Никакая информация об этом не предоставляется в MSDN. На эту тему есть хорошая статья: Windows 10, UWP, Multiple Windows, ViewModels и Sharing State. Сложность в том, что App.xaml
создается отдельно для каждого представления. Интересно посмотреть, что делают другие в подобной ситуации?
Аналогичный вопрос, который относится к страницам, но не к представлениям: (UWP). Лучший способ обмена данными между страницами.
1 ответ
При работе с этим у вас есть несколько представлений, но все же одно приложение. Самое важное здесь упоминается на MSDN, который вы связали:
Каждое окно работает в своем собственном потоке.
Это усложняет ситуацию в случае обмена данными. Поскольку у вас есть одно приложение, вы можете поделиться некоторыми данными в классе приложения, но вы должны обратить внимание на несколько вещей:
- Доступ к элементам пользовательского интерфейса возможен только через поток Dispatcher и в этом случае тот, которому они принадлежат (поэтому вы не можете поделиться этим),
- одновременный доступ к коллекциям - поскольку есть несколько потоков, которые могут одновременно получать к ним доступ или изменять их, используйте коллекции Thread-Safe, а также некоторую помощь здесь,
- в случае синхронизации вам также могут понадобиться некоторые примитивы для управления рабочим процессом приложения,
- Условия гонки - разрабатывайте свое приложение с осторожностью.
Еще некоторую помощь вы можете найти во многих блогах / сообщениях. Например, у Алабхари.