2015-12-14 4 views
2

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

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

Аналогичный вопрос, который относится к страницам, но не взгляды: (UWP) Best practice for sharing data between pages

+0

Я полностью не согласен с предоставлением общих данных в app.xaml или подобных хаках. Вы должны создать достойную архитектуру с услугами или репозиториями для обработки таких сложных сценариев. – Bart

+0

@Bart Почему бы не использовать [параллельные коллекции] (https://msdn.microsoft.com/en-us/library/dd997305 (v = vs.110) .aspx) и некоторые [примитивы синхронизации] (https: // msdn.microsoft.com/en-us/library/ms228964(v=vs.110).aspx)? – Romasz

+1

@ Romasz ничего плохого с ними, «au contraire», но я все равно поеду на достойную архитектуру. – Bart

ответ

3

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

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

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

  • элементы пользовательского интерфейса могут быть доступны только через грузоотправитель нити и в этом случае тот, который владеет ими (так что вы не можете поделиться этим)
  • одновременный доступ к коллекциям - поскольку есть несколько потоков, которые могут одновременно получить доступ/изменить их, используйте Thread-Safe collections, также некоторые help here,
  • в случае синхронизации, вы также, возможно, потребуется some primitives для управляйте своим рабочим процессом,
  • условия гонки - создайте приложение с осторожностью.

Дополнительная информация, которую вы можете найти во многих блогах/сообщениях. Например, Alabhari's one.