我正在尝试为列表视图创建一个 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