私がしたいことは、ユーザーがリストに項目を追加させることです。その後、アイテムを追加するときに、保存するリストが必要なので、ユーザーがアプリケーションを閉じてもう一度開くと、作成したリストはそのまま残ります。ObservableCollectionの内容を保存して、アプリケーションを再起動してもリストが元のままになることはありますか?
現在、私は自分のリストに項目を追加できますが、アプリを閉じるとすぐに消えてしまいます。
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;
}
}
これは私が今使用しているコードですが、これを保存することはできますが動作しません。
EDIT:だから私は@Alessandro Calarioが提案し、JSONシリアライズを使用した後、リストビューは、ちょうど(私は一つだけを追加していても)私の空のリスト項目のトンを与えるもの試みました。しかし、アイテムが追加され、アプリケーションが閉じられても保存されます。進歩は、少なくとも、私はまだかなりです。誰でも解決策を知っていますか?
私のコード:
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;
}
}
これは私のための最適な選択肢だと思われますが、私はそれを試して、私のアプリはリストを保存しますが、それをもう一度開いて別の項目を追加すると、現在のリストを上書きして1つの項目を追加します。私はそれがまだ私のアプリが開始されるたびにリストの新しいインスタンスを作成するためだと思う。そのため、古いものは、アプリの起動時にリストビューのアイテムソースとして設定されています。それを回避する方法はありますか? –
あなたはキャッシングの内容を読むことができます。利用可能なものがあれば、読み込んで保存したリストを変更して保存し直します。 – apineda
これは、 'var _zonesList = BlobCache.LocalMachine.GetObject>(" zones ");を待ってから、zonesListに項目を追加してもう一度保存するような意味ですか?それは動作しないので。私はzonesListに何かを追加しようとするとNullReferenceExceptionが発生します。なぜこれが起こっているのか分かりません。 –