При работе с данными мы нередко сталкиваемся с проблемой их сохранения. В Xamarin Forms есть различные способы сохранения данных в зависимости от выбранного типа хранилища. Можно выделить четыре типа хранилища данных:
Коллекция Properites в классе Application, которая предназначена для хранения каких-то временных данных
Настройки (Preferences) операционной системы для хранения каких-то атомарных данных типа int или string
Файлы в файловой системе
Базы данных
Свойство Properties класса Application представляет словарь, где каждому ключу с типом string сопоставляется некоторое значение. Содержимое этого словаря автоматически сохраняется перед тем, как приложение завершается, поэтому при новом запуске приложения мы сможем использовать ранее сохраненные в словаре данные.
При этом мы не ограничены только классом Application, в котором собственно определено данное свойство. Мы также можем к нему обращаться в коде страниц с помощью выражения App.Current.Properties.
Принципы работы с Properties те же, что и со стандартными словарями.
Добавление данных в словарь:
App.Current.Properties.Add("name", "Tom"); // или так App.Current.Properties["name"] = "Tom";
Получение значения:
string name = App.Current.Properties["name"];
Получение с проверкой на наличие:
object name = ""; if(App.Current.Properties.TryGetValue("name", out name)) { // выполняем действия, если в словаре есть ключ "name" }
Удаление:
App.Current.Properties.Remove("name");
Например, определим в проекте страницу MainPage. В коде xaml пропишем текстовое поле и кнопку:
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="HelloApp.MainPage"> <StackLayout> <Entry x:Name="nameBox" /> <Button Text="Сохранить" Clicked="OnClick" /> </StackLayout> </ContentPage>
А в коде C# у страницы определим добавление и извлечение из словаря Properties введенного в текстовое поле текста:
using System; using Xamarin.Forms; namespace HelloApp { public partial class MainPage : ContentPage { public MainPage() { InitializeComponent(); } protected override void OnAppearing() { object name = ""; if (App.Current.Properties.TryGetValue("name", out name)) { nameBox.Text = (string)name; } base.OnAppearing(); } private void OnClick(object sender, EventArgs e) { string value = nameBox.Text; App.Current.Properties["name"] = value; } } }