在Xamarin中的ViewModel之间传递数据对象的最正确方法

时间:2019-12-13 16:37:37

标签: xamarin xamarin.forms prism

我有一个Xamarin.Form应用程序,使用Prism进行MVVM,导航和DI。 在页面中,我从WS下载了一个数据对象,我需要将其与沿途下载的其他数据对象(以及状态,标志,这些标志实际上不适合存储在Settings / Preferences中)一起维护,以供其他用户使用。我的应用程序页面,那么如何传递它?

我可以在单个“ GlobalData”对象中收集所有必须在各个页面中使用的所有数据,但是以下每种解决方案的优缺点是什么?

我排除了:

  • 将其作为NavigationParameter传递,因为我认为每次导航时都必须包含该对象是不切实际的,因此我希望每次创建页面时都可以使用该对象或将其实例化

我尝试过:

1从SQLite和LiteDB存储和检索

2从MonkeyCache和Akavache中存储和检索

3存储和检索全局App对象

4在每页中用Prism DI注入对象

所有解决方案都适用于我的测试,从最容易实现的角度出发,我将依次使用3、4、2、1。 到目前为止,使用全球通用的App对象是最简单的,我知道优点,但是缺点是什么? 我只想了解每种方法是否存在根本上的错误。

谢谢!

2 个答案:

答案 0 :(得分:1)

您错过了最明显的选项-在导航过程中传递数据。

INavigationService.NavigateAsync采用类型INavigationParameters的参数,该参数可以存储任意数据。然后,相同的实例将显示在导航到的视图模型中(如果它实现了INavigationAware)。

答案 1 :(得分:0)

我发现维护单例模型对访问视图模型很有用。需要小心管理这些数据。当不相关时,我会清除数据。由于我的工作流程是线性的,因此在工作流程的关键点填充它。通常,模型仅包含具有初始化和清晰方法的DTO和集合。