如何在Xamarin.Forms中存储应用程序设置

如何在Xamarin.Forms中存储应用程序设置,xamarin,xamarin.forms,Xamarin,Xamarin.forms,我们如何在Xamarin.Forms中以键、值对的形式存储和检索应用程序设置? 例如,当应用程序关闭时,我们可以存储用户偏好,并且在重新启动应用程序时,我们可以获取这些值 应用程序对象(在VS中,您会得到一个继承自它的应用程序类,我认为Xamarin Studio模板可能略有不同)有一个专门用于此的属性字典。如果您需要确保立即保存属性,可以调用应用程序.SavePropertiesAsync方法。我用于Xamarin.Forms,好处是由于这是在设备级别实现的,您可以从任何表单项目访问这些设置,

我们如何在Xamarin.Forms中以键、值对的形式存储和检索应用程序设置?
例如,当应用程序关闭时,我们可以存储用户偏好,并且在重新启动应用程序时,我们可以获取这些值

应用程序对象(在VS中,您会得到一个继承自它的
应用程序
类,我认为Xamarin Studio模板可能略有不同)有一个专门用于此的
属性
字典。如果您需要确保立即保存属性,可以调用
应用程序.SavePropertiesAsync
方法。

我用于
Xamarin.Forms
,好处是由于这是在设备级别实现的,您可以从任何表单项目访问这些设置,PCL库或应用程序中的本机项目

  • Nuget:Xam.Plugins.Settings


公共静态字符串用户名
{
get{return AppSettings.GetValueOrDefault(UserNameKey,UserNameDefault);}
set{AppSettings.AddOrUpdateValue(UserNameKey,value);}
}

使用
属性字典也可以这样做

用于存储数据:

Application.Current.Properties ["id"] = someClass.ID;
要获取数据,请执行以下操作:

if (Application.Current.Properties.ContainsKey("id"))
{
    var id = Application.Current.Properties ["id"] as int;
    // do something with id
}

参考:

您可以使用Xamarin.Essential附带的首选项

        /* You need to using Xamarin.Essentials
        If you do not have Xamarin.Essentials installed,
        install it from (NuGet Package Manager)
        */

        // Add a reference to Xamarin.Essentials in your class
        using Xamarin.Essentials;

        // To save a value for a given key in preferences
        Preferences.Set("my_key", "my_value");

        // To retrieve a value from preferences or a default if not set
        var myValue = Preferences.Get("my_key", "default_value");

        // To check if a given key exists in preferences
        bool hasKey = Preferences.ContainsKey("my_key");

        // To remove the key from preferences
        Preferences.Remove("my_key");

        // To remove all preferences
        Preferences.Clear();
请查看此链接:

如果设置是更多在运行时未更改的配置(例如,应用程序的web.config排序),则可以使用app.xaml并在字典中存储值,如下所示:

<Application.Resources>
    <ResourceDictionary>
        <Style x:Key="SmallLabel" TargetType="Label">
            <Setter Property="TextColor" Value="Gray" />
            <Setter Property="Font" Value="{StaticResource FontItalicSmall}" />
        </Style>
    </ResourceDictionary>
</Application.Resources>
var style = (Style)Application.Current.Resources["SmallLabel"];

阿卡瓦什怎么样,你用过吗@SushiHangover@AkashAmin目前,我的几乎所有应用程序中都有
Akavache
(使用它进行缓存,但希望移动到领域以提高速度,并消除未来项目对SQLite的依赖性)。但对于存储一些应用程序设置来说,这有点过分了……太棒了。我也在研究这个领域。谢谢您的反馈。@AkashAmin没问题,我对Xamarin的领域非常感兴趣,因为我曾经在iOS Swift base项目中使用过它,并且印象非常深刻,Xamarin合成基准看起来非常有前景,我们知道,速度是移动领域的王者(!)。。。但是,像任何事情一样,我需要对缓存的数据运行一些测试,以确定它是否真的更适合……是的,我期待着它。谢谢。@Sushingoverbe意识到您不应该将此用于用户设置。这些属性被序列化为xml文件,不使用底层平台的本机设置/首选项机制。例如,在iOS中,它不会将项目存储在NSUserDefault中。您将无法从系统的设置包()Application.Current.Properties中对其进行修改。Properties更多的是关于在激活过程中保留应用程序状态(OnStart/OnSleep/OnResume)。如果有人想知道为什么他们的代码不能持久保存您设置的属性,您需要使用上述命令保存它们!我在这个上面拔了一点头发。谢谢
<Application.Resources>
    <ResourceDictionary>
        <Style x:Key="SmallLabel" TargetType="Label">
            <Setter Property="TextColor" Value="Gray" />
            <Setter Property="Font" Value="{StaticResource FontItalicSmall}" />
        </Style>
    </ResourceDictionary>
</Application.Resources>
var style = (Style)Application.Current.Resources["SmallLabel"];