将选定的列表视图项添加到全局数组

时间:2018-04-03 14:35:08

标签: c# visual-studio win-universal-app

上下文:我在UWP中创建一个程序,其菜单包含一个具有3个不同参数或属性的对象数组。菜单从列表视图中订购食物。我创建了一个添加按钮,可以将selecteditem添加到全局数组中,以便我可以将它传输到另一个页面。我遇到的问题是我创建了一个for循环来为添加项目按钮添加项目,它只是在下一页上吐出我选择的最后一项20次。我是相当新手和学习所以请原谅我,如果我使用非常落后的方法来获得我的结果,但我只是想着这一切,因为我继续。无论如何这里是循环的代码,也许很明显我只需要一组新的眼睛。

 private void AddItemButton_Click(object sender, RoutedEventArgs e)
    {


        for (int i =0;i<20;i++)
        {
            GlobalVars.GlobalStringArray[i] = (ListView.SelectedItem.ToString());

        }

    }

还有一点内容,下一页是继承人。

 protected override void OnNavigatedTo(NavigationEventArgs e)
    {

        for (int i = 0; i < 20; i++)
        {
            ListResultView.Items.Add(GlobalVars.GlobalStringArray[i]);
        }

    }

示例数据来自加载到列表视图中以供选择的数组

        MenuItem[] newItems = new MenuItem[20];
        newItems[0] = new MenuItem("Breakfast", "Bacon and Eggs", 5.00);
        newItems[1] = new MenuItem("Breakfast", "Pancakes", 4.25);

1 个答案:

答案 0 :(得分:0)

如果要在ListView中获取所有选定的项目并将其保存到全局变量中,则无需添加特定按钮即可完成此操作。

ListView控件具有IsMultiSelectCheckBoxEnabledSelectionMode以启用多选。之后,您可以注册SelectionChanged事件以获取所有选定的项目,如下所示:

<ListView IsMultiSelectCheckBoxEnabled="True" SelectionMode="Multiple" SelectionChanged="ListView_SelectionChanged">
        <ListViewItem>item1</ListViewItem>
        <ListViewItem>item2</ListViewItem>
        <ListViewItem>item3</ListViewItem>
</ListView>
List<string> ls = new List<string>();
private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    foreach (var item in e.AddedItems)
    {
        ls.Add((item as ListViewItem).Content.ToString());
    }

    foreach (var _item in e.RemovedItems)
    {
        ls.Remove((_item as ListViewItem).Content.ToString());
    }  
}

然后,如果您导航到其他页面,则可以将此列表作为参数传递。

Frame.Navigate(typeof(BlankPage1),ls);

您可以在其他页面上获取此列表:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    if (e.Parameter != null)
    {
        List<string> ls = e.Parameter as List<string>;
        foreach (var item in ls)
        {
            Debug.WriteLine(item);
        }
    }
}

这只是一个简单的代码示例供您参考,在您的情况下,您需要自己进行更改。