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

4
在Windows 10 UWP中,可以为单个应用程序创建多个窗口(又称包含单独窗口和线程的视图): 但是,在UWP中如何在多个视图之间共享数据/对象?MSDN上没有提供关于此的信息。有一篇关于这个主题的好文章:Windows 10,UWP,多个窗口,ViewModels和共享状态。困难在于每个视图都单独实例化了App.xaml。看看其他人在类似情况下做了什么是很有趣的?

一个与页面相关但不涉及视图的类似问题:(UWP)最佳实践:在页面之间共享数据


我完全不同意将共享数据放置在 app.xaml 或类似的 hack 中。你应该建立一个体面的架构,使用服务或存储库来处理这种复杂的情况。 - Bart
@Bart 为什么不使用并发集合和一些同步原语呢? - Romasz
1
@Romasz 没有任何问题,"相反",但我仍然会选择一个合理的架构。 - Bart
1个回答

4

在使用此功能时,您可以拥有多个视图,但仍只有一个应用程序。这里最重要的是MSDN中提到的:

每个窗口都在自己的线程中运行。

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

  • 只能通过 Dispatcher 线程访问UI元素,在这种情况下只能访问拥有它们的线程(因此您无法共享此内容),
  • 并发访问集合-由于有几个线程可以同时访问/修改它们,请使用线程安全集合,还有一些帮助在这里,
  • 在同步的情况下,您还可能需要一些基元来控制应用程序工作流程,
  • 竞态条件-谨慎设计您的应用程序。

你可以在许多博客/文章中找到更多帮助。例如在Alabhari的博客中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接