繁体   English   中英

如何在Xamarin.forms中不使用单例的情况下保留共享数据

[英]How to keep shared data without using singleton in Xamarin.forms

我有一个带有ListViewContentPage 我正在使用另一个内容页面的按钮导航到该内容页面。 此按钮显示列表项计数。 我将ViewModel连接到每个内容页面。 我可以在将项目添加到ObservableCollection时更新计数,因为字段不是从列表页面添加的。 但是,当我从列表视图中删除项目时,我也想同时更新计数。 我如何才能将此ObservableCollection保留为这两个ContentPAges之间的共享库? 我知道使用Singleton类可以做到这一点。 但是由于我的代码应该支持单元测试,所以我似乎无法做到这一点。

在这些内容页面之间共享此ObservableCollection的最佳方法是什么?

如果我理解正确,则需要在多个ViewModels之间共享一个数据存储库。 这意味着您需要在代码库中的某个位置保留一个存储库实例。 根据您的项目设置,此存储库可以存在于IOC容器中,也可以作为App类或其他地方的简单属性存在。 另外,根据集合数据类型,您可能还需要将数据持久保存到SQL,本地存储等。通过这种方式,可以从应用程序中的任何ViewModel访问集合。

但是,由于我无法完全理解您的意图,因此可能还有其他解决方案。 就像将集合的引用传递到下一页等。

如果您要共享的唯一信息是列表中项目的实际计数,则可以使用Xamarin Forms中内置的MessagingService。

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/messaging-center

因此,在您的示例中,可能创建一个类,其中包含您要共享的所有信息,并在一页中执行

MessagingCenter.Send<ShareInfo>(...)

这样就可以传递数据了。

然后在另一页中

MessagingCenter.Subscribe<ShareInfo>(...)

接收数据并使用它来更新按钮计数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM