在本地保存和加载列表框项目并将它们传递给其他页面

时间:2013-07-14 07:27:12

标签: c# windows-8 windows-store-apps

我目前正在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--;
        }
    }

现在,我希望在用户完成更改后(或许在按钮点击事件中)将此列表保存到本地应用程序存储中。 并且还将所有列表框项目发送到另一个页面。

我不是一个程序员,我设计的东西。

请通过样本或参考指导我。

提前谢谢你:)

2 个答案:

答案 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>作为参数传递。

现在,您可以在构造函数中访问这些数据,并可以根据需要使用。

希望这会有所帮助..