Xamarin/XAML/C# - 如何设置我的 App.Current.Properties 字典?

Posted

技术标签:

【中文标题】Xamarin/XAML/C# - 如何设置我的 App.Current.Properties 字典?【英文标题】:Xamarin/XAML/C# - How do I set up my App.Current.Properties dictionary? 【发布时间】:2021-12-09 01:21:00 【问题描述】:

问题:我正在编写一个计算假期天数的应用程序。在应用程序启动时,系统会提示用户输入他们的休假天数,并将其存储在名为 LeaveDays 的静态字符串中。重新安装我的应用程序后,我意识到 LeaveDays 变量被重置。好的,所以我需要正确保存这些数据。我发现人们经常使用 Application.Current.Properties 选项,因此我没有将 LeaveDays 变量分配给提示条目的值,而是将其分配给 Application.Current.Properties["LeaveDays"] 键。

现在我的问题是我在任何地方都没有设置密钥并且我得到了 KeyNotFoundException。我认为它应该在主 App 文件中设置,但我不想用任何值实例化它。该值需要来自提示。我确定我只是误读了有关此文档的文档,但我不确定应该如何设置属性字典以及它如何与手动输入一起使用。

下面是我的弹出窗口的代码。非常感谢任何帮助:

        async void SetLeaveDaysPopup()
    
        VersionTracking.Track();

        var firstLaunch = VersionTracking.IsFirstLaunchEver;

        if (firstLaunch == true || ChangeLeaveDaysButton.IsEnabled == true)
        
            Application.Current.Properties["LeaveDays"] = await DisplayPromptAsync("Set Leave Days", "Please set the amount of total leave days you have");
            EntitlementDaysText.Text = Application.Current.Properties["LeaveDays"] as string;
            calculateLeaveHours(EntitlementDaysText.Text);
        
    

【问题讨论】:

您设置了两次属性,一次使用DisplayPrompt,一次使用EntitlementDaysText.Text 的值。这样做的目的是什么? 抱歉,现已更正。目的是用这个提示属性设置一个字段的文本属性。 你的代码有什么问题?乍一看,它似乎应该可以工作。 在应用程序加载时,我收到一个 KeyNotFound 异常:'字典中不存在给定的键 'LeaveDays'。我需要在其他地方实例化它吗? 为什么您的帖子中没有包含非常相关的信息?首先,您需要调用SaveProperties() 以确保它们被持久化到磁盘。其次,您应该在尝试访问之前检查密钥是否存在。 【参考方案1】:

在 Jason 的帮助下修复了代码:

async void SetLeaveDaysPopup()
    
        VersionTracking.Track();

        var firstLaunch = VersionTracking.IsFirstLaunchEver;

        if (firstLaunch == true || ChangeLeaveDaysButton.IsEnabled == true)
        
            Application.Current.Properties["LeaveDays"] = await DisplayPromptAsync("Set Leave Days", "Please set the amount of total leave days you have");
            await Application.Current.SavePropertiesAsync();

            if (Application.Current.Properties.ContainsKey("LeaveDays"))
            
                EntitlementDaysText.Text = Application.Current.Properties["LeaveDays"] as string;
            
            calculateLeaveHours(EntitlementDaysText.Text);
        
    

【讨论】:

以上是关于Xamarin/XAML/C# - 如何设置我的 App.Current.Properties 字典?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置我的 datetimepicker 日期?

如何测试我的应用程序漫游设置

如何在我的应用中将 Google 语音输入设置为默认文本输入?

MVVM-我将如何在我的主视图模型(和其他视图模型)和我的设置对话框之间传播设置?

如何在我的 AppDelegate 上设置多个本地通知?

如何在代码块中运行我的程序之前设置/取消设置环境变量