[英]How to keep shared data without using singleton in Xamarin.forms
我有一个带有ListView
的ContentPage
。 我正在使用另一个内容页面的按钮导航到该内容页面。 此按钮显示列表项计数。 我将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.