-1

我正在尝试为列表视图创建一个 foreach 循环,以检测选择了哪些项目(多选已打开),然后将项目的文本连接到一个字符串以使用 frame.navigate 方法传递到第二页。

我用谷歌搜索,这里有几个解决方案建议使用 listview.CheckedItems 或 .SelectedItems,一些较旧的引用 .IsSelected 或 .IsChecked。在我使用的 Visual Studios 版本中,这些似乎都无效。我已使用更新程序来确保我拥有最新版本的 Visual Studios。

需要明确的是:我不是要求有人重写我的作业,而是要找出 listview.checkeditems 的工作替代品是什么,或者如果这根本不再起作用,我应该使用什么来代替 listview 用户选择我可以检测到的项目。

这是我的作业指导。

创建两个数组(20 个元素)。第一个数组将包含所有可用的项目,包括早餐、午餐和晚餐之间的区分符、项目描述和价格。通过加载的事件方法填充此数组。

在第一页,提供三个按钮来选择早餐、午餐或晚餐。当用户单击一个按钮时,该膳食描述的项目(无价格)出现在页面顶部的列表视图框中,并将它们记录在第二个数组中。

向页面添加结帐按钮。单击时转到第二页。

在第二页上,在列表视图框中显示选定的项目(已存储在第二个数组中),包括价格。提供项目的总成本。

结帐按钮之前的一切都有效。我已经从文本文件中填充了数组,餐点按钮将适当的食物加载到列表视图中,并且我知道如何使用 Frame.Navigate 传递字符串,但是如果我无法检测到检查了哪些 Listview 项目,我将无法传递它们!

我做了很多谷歌搜索以找到解决方案,我们没有这门课的教科书,老师的回答是重新观看一些教程视频(其中一半是针对 windows 8 手机的,不再完全正确)。

这是我的结帐按钮的代码片段

 private void CheckoutButton_Click(object sender, RoutedEventArgs e)
    {

        foreach (ListViewItem eachItem in MenuList.CheckedItems)
        {
            checkedMenuItems = checkedMenuItems + "/" + MenuList.Items.ToString();
        }     
    }//end CheckoutButton_Click

CheckedItems 返回的错误是

“ListView”不包含“CheckedItems”的定义,并且找不到接受“ListView”类型的第一个参数的扩展方法“CheckedItems”(您是否缺少 using 指令或程序集引用?)

SelectedItems 会返回相同的错误,并且 Visual Studios 没有建议任何解决方案。

我希望有人可以提供帮助!

谢谢。

我正在为整个 MainPAge 添加代码以防万一。它在单独的 .cs 文件中引用课程(早餐、午餐、晚餐)。

public sealed partial class MainPage : Page
  {
    public static meal[] menuItems = new meal[20];
    public static meal[] menuChoices = new meal[20];
    public string checkedMenuItems;

    public MainPage()
    {
        this.InitializeComponent();
        Loaded += PopulateArray;
    }


    public async void PopulateArray(object sender, RoutedEventArgs e)
    {
        int counter = 0;
        char switchCheck;

        var file = await StorageFile.GetFileFromApplicationUriAsync(new 
Uri("ms-appx:///MenuItems.txt"));
        using (var inputStream = await file.OpenReadAsync())
        using (var classicStream = inputStream.AsStreamForRead())
        using (var streamReader = new StreamReader(classicStream))
        {
            while (streamReader.Peek() >= 0)
            {
                string itemIn = string.Format(streamReader.ReadLine());
                string[] item = itemIn.Split('/');
                switchCheck = Convert.ToChar(item[0]);
                switch (switchCheck)
                {
                    case 'b':
                        menuItems[counter] = new 
breakfast(Convert.ToChar(item[0]), item[1], Convert.ToDecimal(item[2]));
                        // MenuList.Items.Add("works item# " + counter + 
menuItems[counter].getMealType());
                        break;
                    case 'l':
                        menuItems[counter] = new 
lunch(Convert.ToChar(item[0]), item[1], Convert.ToDecimal(item[2]));
                        break;
                    case 'd':
                        menuItems[counter] = new 
dinner(Convert.ToChar(item[0]), item[1], Convert.ToDecimal(item[2]));
                        break;

                }//end switch
                counter++;
            }//end while`
        }

    }//end populateArray method

    private void BreakfastButton_Click(object sender, RoutedEventArgs e)
    {
        MenuList.Items.Clear();

        for (int i = 0; i < menuItems.Length && menuItems[i] != null; i++)
        {
            if (menuItems[i].getMealType() == 'b')
                MenuList.Items.Add(menuItems[i].getMealDesc());

        }//end for loop

    }//end  BreakfastButton_Click

    private void LunchButton_Click(object sender, RoutedEventArgs e)
    {
        MenuList.Items.Clear();

        for (int i = 0; i < menuItems.Length && menuItems[i] != null; i++)
        {
            if (menuItems[i].getMealType() == 'l')
                MenuList.Items.Add(menuItems[i].getMealDesc());

        }//end for loop
    }//end LunchButton_Click

    private void DinnerButton_Click(object sender, RoutedEventArgs e)
    {
        MenuList.Items.Clear();

        for (int i = 0; i < menuItems.Length && menuItems[i] != null; i++)
        {
            if (menuItems[i].getMealType() == 'd')
                MenuList.Items.Add(menuItems[i].getMealDesc());

        }//end for loop
    }//end DinnerButton_Click

    private void CheckoutButton_Click(object sender, RoutedEventArgs e)
    {

        foreach (ListViewItem eachItem in MenuList.CheckedItems)
        {
            checkedMenuItems = checkedMenuItems + "/" + 
MenuList.Items.ToString();
        }

    }//end CheckoutButton_Click
 }//end mainpage
4

2 回答 2

0

根据您的描述,我无法清楚地确定您的对象 MenuList 是什么类型。根据参考资料,您可以使用SelectRange方法来解决此问题。

这可能会链接帮助您:ListViewBase.SelectedItems 属性

于 2018-04-06T19:07:50.997 回答
0

这里似乎有类似的问题,你可以参考我的答案。

C# UWP 将数据从一个 ListView 传递到数组中下一页上的第二个 ListView

于 2018-04-09T05:58:59.280 回答