Unter dem Motto alles ganz anders und doch ähnlich, steht das speichern von Settings mit WinRT. ganz ähnlich wie bei Silverlight kann man einzelne Werte in ein Key Value Dictionary anlegen oder direkt komplexe Datentypen serialisieren und per Dateizugriff lesen und schreiben. Zusätzlich kann man aber nun die Dictionarys in Container gruppieren. Vermutlich um Gruppen von Einstellungen leichter handhaben zu können.
Der Große Unterschied ist, das es kein IsolatedStorage gibt. Die Daten werden entweder lokal, Temporär oder Roaming und damit in der Cloud gespeichert.
Dim localSettings As Windows.Storage.ApplicationDataContainer =
Windows.Storage.ApplicationData.Current.LocalSettings
Dim temporaryFolder As Windows.Storage.StorageFolder =
Windows.Storage.ApplicationData.Current.TemporaryFolder
Dim roamingSettings As Windows.Storage.ApplicationDataContainer =
Windows.Storage.ApplicationData.Current.RoamingSettings
Speichern eines Wertes per Key lokal
localSettings.Values("hannes") = textbox1.Text + " " + Date.Now
Gruppieren per Container
localSettings.CreateContainer("hannescontainer", ApplicationDataCreateDisposition.Always)
localSettings.Containers("hannesontainer").Values("eins") = textbox1.Text + " " + Date.Now
Speichern im Temp Folder ( bei mir C:\Users\pre\AppData\Local\Packages\BUILD.588a3b42-fdba-460e-8a17-f527a66ad183_89gf582k2a27c\TempState )
Dim tf As StorageFile = Await temporaryFolder.CreateFileAsync("hannes.txt",
CreationCollisionOption.ReplaceExisting)
Await FileIO.WriteTextAsync(tf, textbox1.Text + " " + Date.Now)
Bisher konnte ich nicht herausfinden wann der Inhalt des Tempfolders wieder geleert wird.
Die letzte Möglichkeit ist das Speichern in der Cloud, als Roaming bezeichnet. Damit kann der Benutzer von einem Gerät zum anderen wechseln und dort weiter arbeiten. Um das Änderungen in der Konfiguration mitzubekommen gibt es auch ein Event DataChanged (Windows.Storage.ApplicationData.Current.DataChanged ).
Mit folgendem VB.NET Code Beispiel wird gesichert
roamingSettings.Values("hannesroaming") = textbox1.Text + " " + Date.Now
In der Microsoft Cloud gibt es natürlich auch Beschränkungen, die man per Code auslesen kann.
' textblock1.Text = ApplicationData.Current.RoamingStorageQuota
textblock1.Text = ApplicationData.Current.RoamingFolder.Path
Das speichern erledigt WinRT allerdings asynchron. Zuerst werden die Settings in der normalen Settings.dat Datei lokal gespeichert. Erst nach einigen Sekunden, funkt Windows 8 zu Microsoft und übergibt in einem komprimierten XML Format die Daten, wie der Screenshot mit Fiddler zeigt.
Ohne es zu wissen, kann das Roaming nur über die Windows ID (Live ID) funktionieren. Bei meinem Samsung XE700 melde ich mich mit der Live ID an. Wie das ist mit einer Domain Anmeldung, habe ich noch nicht getestet und auch nicht in der Doku gefunden.