我想要做的是让用户将项目添加到列表中。然后,当他们添加项目时,我需要保存列表,这样当用户关闭应用程序并再次打开它时,他们创建的列表仍然存在。
现在,我可以将项目添加到我的列表中,但只要我关闭应用程序,它们就会消失。
private static ObservableCollection<ViewModels.ZoneViewModel> Zones = new ObservableCollection<ViewModels.ZoneViewModel>();
public void PopulateListView(string image, string name, string address)
{
if (name != "" && address != "")
{
Zones.Add(new ViewModels.ZoneViewModel { Image = image, Name = name, Address = address });
Application.Current.Properties["zoneslist"] = Zones;
}
}
protected override void OnAppearing()
{
if (Application.Current.Properties.ContainsKey("zoneslist"))
{
// Put the contents of the "zoneslist" key into a variable as a string.
var savedZones = Application.Current.Properties["zoneslist"] as ObservableCollection<ViewModels.ZoneViewModel>;
// Set the listviews' itemssource to the savedzones list.
zonesList.ItemsSource = savedZones;
}
}
这里是我现在使用的代码,我认为这可以用来保存它,但这不起作用。
编辑:所以我已经尝试了@Alessandro Calario的建议,在使用json序列化之后,listview只给了我很多空列表项(即使我只添加了一个)。但是即使应用程序关闭,也会添加并保存项目。至少进步,但我还没有完成。有人知道解决方案吗?
我的代码:
public void PopulateListView(string image, string name, string address)
{
if (name != "" && address != "")
{
Zones.Add(new ViewModels.ZoneViewModel { Image = image, Name = name, Address = address });
//Serialize to json string
var json = JsonConvert.SerializeObject(Zones);
Application.Current.Properties["zoneslist"] = json;
}
}
protected override void OnAppearing()
{
if (Application.Current.Properties.ContainsKey("zoneslist"))
{
// Put the contents of the "zoneslist" key into a variable as a string.
var savedZones = Application.Current.Properties["zoneslist"] as string; //ObservableCollection<ViewModels.ZoneViewModel>
JsonConvert.DeserializeObject<ObservableCollection<ViewModels.ZoneViewModel>>(savedZones);
// Set the listviews' itemssource to the savedzones list.
zonesList.ItemsSource = savedZones;
}
}
答案 0 :(得分:2)
我认为您可以将对象列表序列化为json String并将其保存到Application Properties
答案 1 :(得分:1)
Application Properties仅存储基元类型。
注意:属性字典只能序列化基本类型 存储。试图存储其他类型(例如List可以 安静地失败)。 资料来源:https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/application-class/
设置它以便将属性用作基本存储,或者转到另一个本地存储机制,例如Sqlite(这是一个很好的指南:https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/databases/)
答案 2 :(得分:1)
如果使用第三方库不适合您的项目,我强烈建议您使用Akavache。这是一个异步,持久的键值存储。
设置非常简单易用。
//插入对象
IObservable<Unit> InsertObject<T>(string key, T value, DateTimeOffset? absoluteExpiration = null);
//获取您的对象
IObservable<T> GetObject<T>(string key);
其中T
可以是您的整个列表。
当然它比这更多但是相信我一点点。阅读完整的文档,希望它符合您的需求。