我不是一个经验丰富的程序员,所以我可能会问一个愚蠢的问题,但我正在做一个待办事项的应用程序。我的应用程序使用一个非常简单的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"]
}
);
}
}
答案 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"]
}
);