如何在多个视图之间共享数据

How to share data among multiple views

在 Windows 10 UWP 中,可以为单个应用程序创建多个 windows(又名视图,其中包含一个单独的 window 和一个线程):

但是在 UWP 中的多个视图之间共享数据/对象的正确方法是什么? MSDN 中没有提供这方面的信息。关于这个主题有一篇很好的文章:Windows 10, UWP, Multiple Windows, ViewModels and Sharing State。困难在于App.xaml 是为每个视图单独实例化的。看看其他人在类似情况下的做法很有趣吗?

一个与页面相关但与浏览量无关的类似问题:

在使用它时,您有多个视图,但仍然是一个应用程序。这里最重要的事情在您链接的 MSDN 中提到:

Each window operates in its own thread.

这使共享数据的情况变得复杂。由于您只有一个应用程序,因此您可以在应用程序中共享一些数据class,但您必须注意以下几点:

  • UI 元素只能通过 Dispatcher 线程访问,在本例中是拥有它们的线程(因此您无法共享),
  • 并发访问集合 - 因为很少有线程可以同时 access/modify 它们,请使用 Thread-Safe collections, also some help here
  • 在同步的情况下,您可能还需要 some primitives 来引导您的应用程序工作流程,
  • 竞争条件 - 谨慎设计您的应用程序。

您可以在许多 blogs/posts 中找到更多帮助。例如在 Alabhari's one.