Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Xamarin.Forms verfügt über ein Properties Wörterbuch, das zum Speichern von Daten verwendet werden kann und auf das mithilfe der Application.Current.Properties Eigenschaft zugegriffen wird. Dieses Wörterbuch verwendet einen string Schlüssel und speichert einen object Wert. Die Werte im Wörterbuch werden auf dem Gerät gespeichert, wenn eine App angehalten oder heruntergefahren wird, und geladen, wenn eine App neu gestartet oder aus dem Hintergrund zurückkehrt. Weitere Informationen zum Eigenschaftenwörterbuch finden Sie im Eigenschaftenwörterbuch.
Beim Migrieren einer Xamarin.Forms-App, die Daten im App-Eigenschaftenwörterbuch zu .NET MAUI speichert, sollten Sie diese Daten zu .NET MAUI-Einstellungen migrieren. Dies kann mit den LegacyApplication Klassen und Hilfsklassen erreicht werden, die in diesem Artikel vorgestellt werden. Mit dieser Klasse kann Ihre .NET MAUI-App unter Android, iOS und Windows Daten aus dem App-Eigenschaftenwörterbuch lesen, das mit einer früheren Xamarin.Forms-Version Ihrer App erstellt wurde. Weitere Informationen zu .NET MAUI-Einstellungen finden Sie unter "Einstellungen".
Von Bedeutung
Es gibt keine API für den Zugriff auf das App-Eigenschaftenwörterbuch in .NET MAUI.
Zugreifen auf Legacy-App-Eigenschaftendaten
Der folgende Code zeigt die LegacyApplication Klasse, die Zugriff auf die App-Eigenschaftendaten bietet, die von Ihrer Xamarin.Forms-App erstellt wurden:
Hinweis
Um diesen Code zu verwenden, fügen Sie ihn einer Klasse hinzu, die in Ihrem .NET MAUI-App-Projekt benannt ist LegacyApplication .
namespace MigrationHelpers;
public class LegacyApplication
{
readonly PropertiesDeserializer deserializer;
Task<IDictionary<string, object>>? propertiesTask;
static LegacyApplication? current;
public static LegacyApplication? Current
{
get
{
current ??= (LegacyApplication)Activator.CreateInstance(typeof(LegacyApplication));
return current;
}
}
public LegacyApplication()
{
deserializer = new PropertiesDeserializer();
}
public IDictionary<string, object> Properties
{
get
{
propertiesTask ??= GetPropertiesAsync();
return propertiesTask.Result;
}
}
async Task<IDictionary<string, object>> GetPropertiesAsync()
{
IDictionary<string, object> properties = await deserializer.DeserializePropertiesAsync().ConfigureAwait(false);
properties ??= new Dictionary<string, object>(4);
return properties;
}
}
Android
Unter Android verwendet die LegacyApplication-Klasse die PropertiesDeserializer-Klasse, um Daten aus der Eigenschaftsdatei der App zu deserialisieren. Der folgende Code zeigt die PropertiesDeserializer-Klasse:
Hinweis
Um diesen Code zu verwenden, fügen Sie ihn zu einer Klasse hinzu, die im Ordner PropertiesDeserializer" Ihres .NET MAUI-App-Projekts benannt ist.
using System.Diagnostics;
using System.IO.IsolatedStorage;
using System.Runtime.Serialization;
using System.Xml;
namespace MigrationHelpers;
public class PropertiesDeserializer
{
const string PropertyStoreFile = "PropertyStore.forms";
public Task<IDictionary<string, object>> DeserializePropertiesAsync()
{
// Deserialize property dictionary to local storage
return Task.Run(() =>
{
using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
{
if (!store.FileExists(PropertyStoreFile))
return null;
using (IsolatedStorageFileStream stream = store.OpenFile(PropertyStoreFile, FileMode.Open, FileAccess.Read))
using (XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader(stream, XmlDictionaryReaderQuotas.Max))
{
if (stream.Length == 0)
return null;
try
{
var dcs = new DataContractSerializer(typeof(Dictionary<string, object>));
return (IDictionary<string, object>)dcs.ReadObject(reader);
}
catch (Exception e)
{
Debug.WriteLine("Could not deserialize properties: " + e.Message);
Console.WriteLine($"PropertyStore Exception while reading Application properties: {e}");
}
}
}
return null;
});
}
}
Ios
Unter iOS verwendet die LegacyApplication Klasse die PropertiesDeserializer Klasse, um Daten aus der Wörterbuchdatei der App-Eigenschaften zu deserialisieren. Der folgende Code zeigt die PropertiesDeserializer-Klasse:
Hinweis
Um diesen Code zu verwenden, fügen Sie ihn einer Klasse hinzu, die im Ordner PropertiesDeserializer" Ihres .NET MAUI-App-Projekts benannt ist.
using System.Diagnostics;
using System.IO.IsolatedStorage;
using System.Runtime.Serialization;
using System.Xml;
namespace MigrationHelpers;
public class PropertiesDeserializer
{
const string PropertyStoreFile = "PropertyStore.forms";
public Task<IDictionary<string, object>> DeserializePropertiesAsync()
{
// Deserialize property dictionary to local storage
return Task.Run(() =>
{
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
using (var stream = store.OpenFile(PropertyStoreFile, System.IO.FileMode.OpenOrCreate))
using (var reader = XmlDictionaryReader.CreateBinaryReader(stream, XmlDictionaryReaderQuotas.Max))
{
if (stream.Length == 0)
return null;
try
{
var dcs = new DataContractSerializer(typeof(Dictionary<string, object>));
return (IDictionary<string, object>)dcs.ReadObject(reader);
}
catch (Exception e)
{
Debug.WriteLine("Could not deserialize properties: " + e.Message);
Console.WriteLine($"PropertyStore Exception while reading Application properties: {e}");
}
}
return null;
});
}
}
Windows
Unter Windows verwendet die LegacyApplication Klasse die PropertiesDeserializer Klasse, um Daten aus der Wörterbuchdatei der App-Eigenschaften zu deserialisieren. Der folgende Code zeigt die PropertiesDeserializer-Klasse:
Hinweis
Um diesen Code zu verwenden, fügen Sie ihn einer Klasse hinzu, die im Ordner PropertiesDeserializer" Ihres .NET MAUI-App-Projekts benannt ist.
using System.Diagnostics;
using System.Runtime.Serialization;
using Windows.Storage;
namespace MigrationHelpers;
public class PropertiesDeserializer
{
const string PropertyStoreFile = "PropertyStore.forms";
public async Task<IDictionary<string, object>> DeserializePropertiesAsync()
{
try
{
StorageFile file = await ApplicationData.Current.RoamingFolder.GetFileAsync(PropertyStoreFile).DontSync();
using (Stream stream = (await file.OpenReadAsync().DontSync()).AsStreamForRead())
{
if (stream.Length == 0)
return new Dictionary<string, object>(4);
try
{
var serializer = new DataContractSerializer(typeof(IDictionary<string, object>));
return (IDictionary<string, object>)serializer.ReadObject(stream);
}
catch (Exception e)
{
Debug.WriteLine("Could not deserialize properties: " + e.Message);
Console.WriteLine($"PropertyStore Exception while reading Application properties: {e}");
}
return null;
}
}
catch (FileNotFoundException)
{
return new Dictionary<string, object>(4);
}
}
}
Für diese Windows-Version der PropertiesDeserializer Klasse ist die DontSync Erweiterungsmethode erforderlich. Der folgende Code zeigt diese Erweiterungsmethode:
Hinweis
Um diesen Code zu verwenden, fügen Sie ihn einer Klasse hinzu, die im Ordner Extensions" Ihres .NET MAUI-App-Projekts benannt ist.
using System.Runtime.CompilerServices;
using Windows.Foundation;
namespace MigrationHelpers;
internal static class Extensions
{
public static ConfiguredTaskAwaitable<T> DontSync<T>(this IAsyncOperation<T> self)
{
return self.AsTask().ConfigureAwait(false);
}
}
Verwenden von Legacy-App-Eigenschaftsdaten
Die LegacyApplication Klasse kann verwendet werden, um Daten aus dem App-Eigenschaftenwörterbuch unter Android, iOS und Windows zu nutzen, das mit einer vorherigen Xamarin.Forms-Version Ihrer App erstellt wurde:
#if ANDROID || IOS || WINDOWS
using MigrationHelpers;
...
int id;
if (LegacyApplication.Current.Properties.ContainsKey("id"))
{
id = (int)LegacyApplication.Current.Properties["id"];
Preferences.Set("id", id);
}
#endif
Dieses Beispiel zeigt die Verwendung der LegacyApplication Klasse zum Lesen eines Werts aus dem App-Eigenschaftenwörterbuch und anschließendes Schreiben des Werts in .NET MAUI-Einstellungen.
Von Bedeutung
Überprüfen Sie immer, ob der Schlüssel im App-Eigenschaftenverzeichnis vorhanden ist, bevor Sie darauf zugreifen, um unerwartete Fehler zu vermeiden.