UWP:如何从变量中检索复合值



我不是一个超级经验的程序员,所以我可能会问一个愚蠢的问题,但是我正在制作一个待办事项应用程序。我的应用程序使用了一个非常简单的项目,以收集用户输入来创建项目。我被卡住的地方正在尝试tosave并在用户退出应用程序时序列化数据。我可以缓存页面之间的数据,但是如果用户关闭并重新打开了应用程序,则数据就消失了。我试图通过复合值将数据存储在当地,但是我使用预确定的变量设置了复合材料,并且我需要能够稍后在使用保存的信息重新创建ItemScontrol时阅读该信息。这是我的代码。我在此处为ItemScontrol和复合值定义变量:

List<ToDoItem> items = new List<ToDoItem>();
    private void CreateItem_Click(object sender, RoutedEventArgs e)
    {
        ToDoItemTemplate.Items.Add(new ToDoItem() { ItemTitle = NameBox.Text, Month = itemdate.Date.Month, Date = itemdate.Date.Day, Year = itemdate.Date.Year });
        Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
        // Create a composite setting
        Windows.Storage.ApplicationDataCompositeValue composite = new Windows.Storage.ApplicationDataCompositeValue();
        composite["intValM"] = itemdate.Date.Month;
        composite["intValD"] = itemdate.Date.Day;
        composite["intValY"] = itemdate.Date.Year;
        composite["strVal"] = NameBox.Text;
        localSettings.Values["CompositeSetting"] = composite;
        addItemPopup.IsOpen = false;
        addItem.Background.SetValue(SolidColorBrush.ColorProperty, Windows.UI.Colors.Transparent);
        NameBox.Text = "";
        CreateItem.IsEnabled = false;
    }

我是尝试从这里阅读信息。我已经尝试了很多东西,并且已经浏览了许多不同的论坛,包括官方Microsoft开发人员的网站。

private new void Loaded(object sender, RoutedEventArgs e)
        {
            Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
            Windows.Storage.ApplicationDataCompositeValue composite =
   (Windows.Storage.ApplicationDataCompositeValue)localSettings.Values["CompositeSetting"];
            if (composite == null)
            {
                // No data
            }
            else
            {
                ToDoItemTemplate.Items.Add(
                    new ToDoItem()
                    {
                        ItemTitle = "strVal",
                        Month = localSettings.Values["intValM"],
                        Date = localSettings.Values["intValD"],
                        Year = localSettings.Values["intValY"]
                    }
                );
            }
        }

我格式化了您的代码,现在可以看到问题是什么。:)

在创建新的ToDoItem的地方,您使用localSettings.Values["intValM"]等。

您在composite变量中具有您的值,因此您应该写:

ToDoItemTemplate.Items.Add(
    new ToDoItem()
    {
        ItemTitle = composite["strVal"],
        Month = composite["intValM"],
        Date = composite["intValD"],
        Year = composite["intValY"]
    }
);

如何从变量中检索复合值?

保存数据的代码逻辑中的复合变量是正确的。在Loaded事件处理程序中,您从LocalSettings获得了复合实例,此步骤是正确的,但是您从LocalSettings获得了特定值不正确,您可以从复合实例中获得以下代码的值:

Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.ApplicationDataCompositeValue composite =(Windows.Storage.ApplicationDataCompositeValue)localSettings.Values["CompositeSetting"];
if (composite == null)
{
}
else
{
    var ItemTitle = composite["strVal"];
    var Month = composite["intValM"];
    var Day = composite["intValD"];
    var Year = composite["intValY"];
}

最新更新