C# 本地保存和加载列表框项目,并将其传递到其他页面
我目前正在c#中开发Windows应用商店应用程序 现在,, 我有一个列表框“Listbox1”,它从文本框“tasks”中获取按钮单击事件中的项目,并在其他按钮单击事件中具有selected items delete属性C# 本地保存和加载列表框项目,并将其传递到其他页面,c#,windows-8,windows-store-apps,C#,Windows 8,Windows Store Apps,我目前正在c#中开发Windows应用商店应用程序 现在,, 我有一个列表框“Listbox1”,它从文本框“tasks”中获取按钮单击事件中的项目,并在其他按钮单击事件中具有selected items delete属性 private void add_Click(object sender, RoutedEventArgs e) { string t; t = tasks.Text; if (t != "") {
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--;
}
}
private void add\u单击(对象发送者,路由目标)
{
字符串t;
t=任务。文本;
如果(t!=“”)
{
列表框1.Items.Add(t);
}
其他的
{
var a=新建消息对话框(“请先输入任务”);
a、 添加(新的UICommand(“Ok”);
a、 ShowAsync();
}
任务。Text=“”;
}
私有无效删除单击(对象发送者,路由目标e)
{
对于(int p=0;p
现在,我想在用户完成更改后(可能在按钮单击事件上),将此列表保存到本地应用程序存储中。
以及将所有列表框项目发送到其他页面
我不是一个程序员,我设计东西
请通过样品或参考来指导我
提前感谢:)如果您已经将数据存储到本地存储器,您可以在导航到另一页的
覆盖中读取数据。否则,请使用导航参数:
编辑:我不确定您是否还需要一些有关本地存储的信息。这很简单:Windows.Storage.ApplicationData.Current.LocalSettings
有一个名为Values的属性,它是一个可以将设置写入的字典。看看
编辑:尝试类似以下代码的方法来存储列表
// 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));
//尝试从本地存储中获取旧内容。
对象oldData=null;
ApplicationDataContainer设置=ApplicationData.Current.LocalSettings;
bool isFound=settings.Values.TryGetValue(“列表”,输出旧数据);
//将列表保存到本地存储。(不能直接存储列表,因为它不是
//可序列化,因此我们通过数组使用迂回。)
List newData=newlist(新字符串[]{“test”、“blah”、“blubb”});
settings.Values[“List”]=newData.ToArray();
//测试保存的列表是否包含预期数据。
Debug.Assert(!isFound | | Enumerable.SequenceEqual((字符串[])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);
}
受保护的覆盖无效OnNavigatedTo(NavigationEventArgs e){
基地。导航到(e);
if(this.ListBox1.ItemsSource==null){
对象列表;
if(ApplicationData.Current.LocalSettings.Values.TryGetValue(“列表”,输出列表)){
this.ListBox1.ItemsSource=新列表((字符串[])列表);
}否则{
this.ListBox1.ItemsSource=新列表();
}
}
}
受保护的覆盖无效OnNavigatedFrom(NavigationEventArgs e){
如果(this.ListBox1.ItemsSource!=null){
ApplicationData.Current.LocalSettings.Values[“List”]=this.ListBox1.ItemsSource.ToArray();
}
基于(e)的导航;
}
这是一个非常好的简单示例,介绍在winRT应用程序开发中使用SQLite数据库的情况。查看它,您将知道如何在本地计算机上存储数据。我从这个示例中学习了基本代码
现在,为了便于导航,让我为您的应用程序的这一部分建议一个流程
取一个字符串的可观测集合
,并存储
使用onClick()
将该文本框插入此ObservationCollection,然后
请将ObservableCollection
参阅
列表框
现在,当您需要将数据发送到下一页时,为下一页创建一个参数化构造函数,并将该observateCollection
作为参数传递
现在,您可以在构造函数中访问这些数据,并可以根据需要使用它们
希望这会有所帮助。不,我还没有存储数据。这就是最让我头疼的地方,因为每当应用程序重新启动时,所有更改都会丢失。您是否将这些内容写入了ApplicationDataContainer
?我添加了一个适合我的样品。在第一次运行中,isFound
是false
,之后,它应该是true
,oldData
应该包含字符串。