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