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

时间:2017-09-14 23:54:22

标签: c# visual-studio xaml uwp

我不是一个经验丰富的程序员,所以我可能会问一个愚蠢的问题,但我正在做一个待办事项的应用程序。我的应用程序使用一个非常简单的itemsControl来收集用户输入来创建项目。我遇到困难的地方是在用户退出应用程序时尝试tosave并序列化该数据。我可以在页面之间缓存数据,但如果用户关闭并重新打开应用程序,数据就会消失。我试图通过复合值将数据存储在localSettings中,但我使用预先确定的变量设置复合,我需要能够在以后使用保存的信息重新创建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;
    }

尝试从这里读取信息。我已经尝试了很多东西并浏览了很多不同的论坛,包括官方的微软开发者网站。

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"]
                    }
                );
            }
        }

2 个答案:

答案 0 :(得分:0)

  

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

将数据保存到复合变量中的代码逻辑是正确的。在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"];
}

答案 1 :(得分:0)

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

您使用ToDoItem等创建新localSettings.Values["intValM"]的位置

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

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