Как обмениваться данными между несколькими представлениями

В Windows 10 UWP можно создать несколько окон (так называемые представления, которые содержат отдельное окно и поток) для одного приложения:

Но как правильно делиться данными / объектами между несколькими представлениями в UWP? Никакая информация об этом не предоставляется в MSDN. На эту тему есть хорошая статья: Windows 10, UWP, Multiple Windows, ViewModels и Sharing State. Сложность в том, что App.xaml создается отдельно для каждого представления. Интересно посмотреть, что делают другие в подобной ситуации?

Аналогичный вопрос, который относится к страницам, но не к представлениям: (UWP). Лучший способ обмена данными между страницами.

1 ответ

Решение

При работе с этим у вас есть несколько представлений, но все же одно приложение. Самое важное здесь упоминается на MSDN, который вы связали:

Каждое окно работает в своем собственном потоке.

Это усложняет ситуацию в случае обмена данными. Поскольку у вас есть одно приложение, вы можете поделиться некоторыми данными в классе приложения, но вы должны обратить внимание на несколько вещей:

  • Доступ к элементам пользовательского интерфейса возможен только через поток Dispatcher и в этом случае тот, которому они принадлежат (поэтому вы не можете поделиться этим),
  • одновременный доступ к коллекциям - поскольку есть несколько потоков, которые могут одновременно получать к ним доступ или изменять их, используйте коллекции Thread-Safe, а также некоторую помощь здесь,
  • в случае синхронизации вам также могут понадобиться некоторые примитивы для управления рабочим процессом приложения,
  • Условия гонки - разрабатывайте свое приложение с осторожностью.

Еще некоторую помощь вы можете найти во многих блогах / сообщениях. Например, у Алабхари.

Другие вопросы по тегам