0

我目前正在使用 c# 开发 Windows Store App。

现在,我有一个列表框“Listbox1”,它从文本框“任务”的按钮单击事件中获取其项目,并在其他按钮单击事件上选择了项目删除属性。

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--;
        }
    }

现在我想在用户完成更改后(可能在按钮单击事件上)将此列表保存到本地应用程序存储中。并且还将所有列表框项发送到另一个页面。

我不是一个编码员,我设计东西。

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

先感谢您 :)

4

2 回答 2

0

这是关于在 winRT 应用程序开发中使用 SQLite 数据库的非常好的简单示例。看看它,您就会知道如何将数据存储在本地计算机上。我从这个例子中学习了基本代码。

http://blogs.msdn.com/b/robertgreen/archive/2012/11/13/using-sqlite-in-windows-store-apps.aspx

现在,为了便于导航,让我为您的应用程序的这一部分推荐一个流程。

取其中一个ObservableCollection<>并将string该文本框的值存储到此 ObservationCollection 中onClick(),然后将其引用ObservableCollection<String>ItemsListlistBox 中。

现在,当您需要将数据发送到下一页时,创建一个下一页的参数化构造函数并将其ObservableCollection<String>作为参数传递。

现在您可以在构造函数中访问这些数据,并且可以随意使用。

希望这会有所帮助..

于 2013-07-15T09:09:17.650 回答
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);
}
于 2013-07-14T07:43:56.417 回答