Benutzer mit den meisten Antworten
UWP Einstellungen Speichern

Frage
-
Hallo,
Ich versuche in einer UWP-App Einstellungen zu speichern. Dafür nutze ich ApplicationData.Current.LocalSettings.Values[]. Als Testaufbau hab ich einen toggleSwitch genommen und beim laden der Seite dem toggleSwitch den Gespeicherten Wert gegeben:
if (ApplicationData.Current.LocalSettings.Values.ContainsKey("toggleSwitch1"))
toggleSwitch1.IsOn = Convert.ToBoolean(ApplicationData.Current.LocalSettings.Values["toggleSwitch1"]);Sobald der Wert vom toggleSwitch geändert wird, wird im Toggled-Event die Einstellung geändert:
ApplicationData.Current.LocalSettings.Values["toggleSwitch1"] = toggleSwitch1.IsOn;
Das ganze funktioniert auch gut, wenn ich aber das gleiche für 2 toggleSwitches mache wird der Wert des zweiten toggleSwitch false wenn der Wert des ersten toggleSwitch true ist. Der Code:
public Einstellungen() { this.InitializeComponent(); listBox.Items.Add(Convert.ToString(ApplicationData.Current.LocalSettings.Values["toggleSwitch2"])); // Wenn true gespeicher wurde wird immer true angezeigt= Wert stimmt hier noch. if (ApplicationData.Current.LocalSettings.Values.ContainsKey("toggleSwitch1")) // die Abfrage hat keinen Einfluss auf den Wert, hab ich Getestet. { toggleSwitch1.IsOn = Convert.ToBoolean(ApplicationData.Current.LocalSettings.Values["toggleSwitch1"]); //Die Ursache der Problems, dieses Stück Code beeiflusst die Variable. } if (ApplicationData.Current.LocalSettings.Values.ContainsKey("toggleSwitch2")) { listBox.Items.Add(Convert.ToString(ApplicationData.Current.LocalSettings.Values["toggleSwitch2"])); // Hier Wird true Ausgegeben wenn "toggleSwitch1" false ist und false wenn "toggleSwitch1" true ist. toggleSwitch2.IsOn = Convert.ToBoolean(ApplicationData.Current.LocalSettings.Values["toggleSwitch2"]); } } private void toggleSwitchEndschalter_Toggled(object sender, RoutedEventArgs e) { ApplicationData.Current.LocalSettings.Values["toggleSwitch1"] = toggleSwitch1.IsOn; ApplicationData.Current.LocalSettings.Values["toggleSwitch2"] = toggleSwitch2.IsOn; }
Antworten
-
Hallo,
ich kann es gerade nicht testen, glaube aber zu wissen wo der Fehler liegt. Wenn du im Einstellungen-Konstruktur den Toggle-Switch-Wert setzt, dann wird auch das Toggled-Event ausgelöst und die Einstellungen werden neu geschrieben.
Das heißt also das zu Beginn beide TS auf aus stehen. Dann setzt du den ersten auf die Einstellung, Toggled wird ausgeführt und der Wert von TS1 und TS2 (der noch immer auf aus steht) werden neu in die Einstellungen abgelegt.
Um das zu umgehen hast du folgende Möglichkeiten:
- Ein Toggled-Event Handler pro Switch
- Das Toggled-Event erst nach dem Laden abonnieren
- Das Toggled-Event komplett außen vor lassen und einen Speichern-Button einbauen (eher unschön in den Apps)
- Im Toggled-Eventhandler prüfen ob das Fenster schon geladen wurde.
Ich favorisiere 4. oder 2. wenn du kein MVVM implementieren möchtest. An sich solltest du aber über 1. nachdenken da es einen deutlichen Leistungsunterschied geben kann ob du immer nur eine Einstellung oder jedes mal alle neu ablegen möchtest.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert jojo_hau Montag, 21. September 2015 14:48
Alle Antworten
-
Hallo,
ich kann es gerade nicht testen, glaube aber zu wissen wo der Fehler liegt. Wenn du im Einstellungen-Konstruktur den Toggle-Switch-Wert setzt, dann wird auch das Toggled-Event ausgelöst und die Einstellungen werden neu geschrieben.
Das heißt also das zu Beginn beide TS auf aus stehen. Dann setzt du den ersten auf die Einstellung, Toggled wird ausgeführt und der Wert von TS1 und TS2 (der noch immer auf aus steht) werden neu in die Einstellungen abgelegt.
Um das zu umgehen hast du folgende Möglichkeiten:
- Ein Toggled-Event Handler pro Switch
- Das Toggled-Event erst nach dem Laden abonnieren
- Das Toggled-Event komplett außen vor lassen und einen Speichern-Button einbauen (eher unschön in den Apps)
- Im Toggled-Eventhandler prüfen ob das Fenster schon geladen wurde.
Ich favorisiere 4. oder 2. wenn du kein MVVM implementieren möchtest. An sich solltest du aber über 1. nachdenken da es einen deutlichen Leistungsunterschied geben kann ob du immer nur eine Einstellung oder jedes mal alle neu ablegen möchtest.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert jojo_hau Montag, 21. September 2015 14:48
-
Danke für die Antwort,
Ich verwende jetzt die von dir genannte option 1. Das jeder ToggleSwitch sein eigenes Event hat damit nicht unnötig Daten gespeichert werden. Mir ist noch aufgefallen das der ToggleSwitch blau wird wenn er aktiviert ist. Soweit ist das ja nicht schlimm nur wird diese Farbe auf dem Raspberry PI als Pink angezeigt, ich denke das die Farbe nicht unterstützt wird oder nicht geladen werden kann. Kann man dass irgend wo einstellen oder die Farbe irgendwie ändern?
-
Hallo,
mache für neue Fragen bitte einen neuen Thread auf.
Die Farbe ist die Design-Farbe des Betriebssystems. Die ist beim IoT aus irgend einem Grund Magenta und auf dem normalen Windows diesen bestimmte Blau.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets