我目前正在c#中使用Windows应用商店。
现在, 我有一个列表框'Listbox1',它从文本框'tasks'中的按钮点击事件中获取其项目,并在其他按钮点击事件中选择了项目删除属性。
private void add_Click(object sender, RoutedEventArgs e)
{
string t;
t = tasks.Text;
if (t != "")
{
Listbox1.Items.Add(t);
}
else
{
var a = new MessageDialog("Please Enter the Task First");
a.Commands.Add(new UICommand("Ok"));
a.ShowAsync();
}
tasks.Text = "";
}
private void del_Click(object sender, RoutedEventArgs e)
{
for (int p = 0; p < Listbox1.SelectedItems.Count; p++)
{
Listbox1.Items.Remove(Listbox1.SelectedItems[p].ToString());
p--;
}
}
现在,我希望在用户完成更改后(或许在按钮点击事件中)将此列表保存到本地应用程序存储中。 并且还将所有列表框项目发送到另一个页面。
我不是一个程序员,我设计的东西。
请通过样本或参考指导我。
提前谢谢你:)
答案 0 :(得分:0)
如果您已将数据存储到本地存储,则只需在另一页的OnNavigatedTo
覆盖中读取即可。否则,请使用导航参数:http://social.msdn.microsoft.com/Forums/windowsapps/en-US/8cb42356-82bc-4d77-9bbc-ae186990cfd5/passing-parameters-during-navigation-in-windows-8
编辑:我不确定您是否还需要有关本地存储的一些信息。这很简单:Windows.Storage.ApplicationData.Current.LocalSettings
有一个名为Values的属性,您可以将设置写入Dictionary
。看看http://msdn.microsoft.com/en-us/library/windows/apps/hh700361.aspx
编辑:尝试使用此代码来存储您的列表。
// Try to get the old stuff from local storage.
object oldData = null;
ApplicationDataContainer settings = ApplicationData.Current.LocalSettings;
bool isFound = settings.Values.TryGetValue("List", out oldData);
// Save a list to local storage. (You cannot store the list directly, because it is not
// serialisable, so we use the detours via an array.)
List<string> newData = new List<string>(new string[] { "test", "blah", "blubb" });
settings.Values["List"] = newData.ToArray();
// Test whether the saved list contains the expected data.
Debug.Assert(!isFound || Enumerable.SequenceEqual((string[]) oldData, newData));
请注意,这只是用于测试的演示代码 - 它没有真正意义......
编辑:一条建议:不要在列表处理程序中保留列表,因为随着列表的增长,列表会变得极其缓慢。我会在导航处理程序中加载并保存列表,即添加类似
的内容protected override void OnNavigatedTo(NavigationEventArgs e) {
base.OnNavigatedTo(e);
if (this.ListBox1.ItemsSource == null) {
object list;
if (ApplicationData.Current.LocalSettings.Values.TryGetValue("List", out list)) {
this.ListBox1.ItemsSource = new List<string>((string[]) list);
} else {
this.ListBox1.ItemsSource = new List<string>();
}
}
}
protected override void OnNavigatedFrom(NavigationEventArgs e) {
if (this.ListBox1.ItemsSource != null) {
ApplicationData.Current.LocalSettings.Values["List"] = this.ListBox1.ItemsSource.ToArray();
}
base.OnNavigatedFrom(e);
}
答案 1 :(得分:0)
这是关于SQLite DataBase在winRT app开发中使用的非常好的简单示例。看看它,您就会知道如何在本地计算机上存储数据。我从这个例子中学到了基本代码。
http://blogs.msdn.com/b/robertgreen/archive/2012/11/13/using-sqlite-in-windows-store-apps.aspx
现在,为了便于导航,我建议您为应用的这一部分提供流程。
获取一个
ObservableCollection<>
string
并存储值 那个textBox用onClick()
进入这个ObservationCollection然后 将ObservableCollection<String>
引用到ItemsList
列表框。
现在,当您需要将数据发送到下一页时,请创建下一页的参数化构造函数,并将ObservableCollection<String>
作为参数传递。
现在,您可以在构造函数中访问这些数据,并可以根据需要使用。
希望这会有所帮助..