c#uwp listview checkitems无效

时间:2018-04-06 16:09:17

标签: c# listview uwp checkeditems

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

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

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

以下是我作业的说明。

  

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

     

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

     

向页面添加结帐按钮。点击后转到第二页。

     

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

结帐按钮的所有功能都有效。我已经从文本文件中填充了数组,进餐按钮将相应的食物加载到listview中,我知道如何使用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'的定义,并且没有扩展方法'CheckedItems'可以找到接受类型'ListView'的第一个参数(你是否缺少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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

这里似乎有一个类似的问题,你可以在那里引用我的答案。

C# UWP Passing Data From One ListView To A Second Listview on the Next Page in a Array