如何在多个视图之间共享数据
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.
在 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.