Как сохранить общие данные без использования синглтона в Xamarin.forms - PullRequest
0 голосов
/ 08 июня 2018

У меня есть ContentPage с ListView.Я перехожу на эту страницу контента, используя кнопку другой страницы контента.Эта кнопка показывает количество элементов списка.У меня ViewModel подключен к каждой странице контента.Я могу обновить счетчик, когда добавляю элементы в мой ObservableCollection, так как поле добавляется не со страницы списка.Но когда я удаляю элемент из списка, я хочу обновить счет за это время.Как я могу сохранить этот ObservableCollection как общий для этих 2 ContentPAges?Я знаю, используя класс Singleton, мы можем сделать это.Но так как мой код должен поддерживать модульное тестирование, кажется, я не могу этого сделать.

Как лучше всего сделать это ObservableCollection общим для этих страниц контента?

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Если я правильно понимаю, вам нужен один репозиторий данных для совместного использования несколькими ViewModels.Это означает, что вам нужно хранить один экземпляр репозитория где-то в вашей кодовой базе.В зависимости от настроек вашего проекта, этот репозиторий может находиться в контейнере IOC или как простое свойство в классе App или где-либо еще.Кроме того, это зависит от типа данных коллекции, который вам также может понадобиться для сохранения данных в SQL, локальном хранилище и т. Д. Таким образом, доступ к коллекции из любого ViewModel в приложении будет тривиальным.

Однако, посколькуЯ не совсем понимаю ваши намерения, могут быть другие решения.Например, передать ссылку на коллекцию на следующую страницу и т. Д.

0 голосов
/ 08 июня 2018

Если единственной информацией, которой вы хотите поделиться, является фактическое количество элементов в списке, вы можете использовать MessagingService, встроенный в Xamarin Forms.

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

Таким образом, в вашем примере, возможно, создайте класс, который содержит всю информацию, которой вы хотите поделиться, и на одной странице выполните

MessagingCenter.Send<ShareInfo>(...)

Так что вы можете передавать данные.

А в другойpage do

MessagingCenter.Subscribe<ShareInfo>(...)

Чтобы получить данные и использовать их для обновления счетчика кнопок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...