我正在编写一个Windows 8应用程序(XAML-C#-Windows Store app(metro)),我必须遍历GridView的SelectedItems集合。
这是我的代码:
private void bottomAppBarBotonEliminar_Tapped(object sender, TappedRoutedEventArgs e)
{
//Borrar el(los) elemento(s) seleccionado(s)
foreach (GridViewItem elItem in GVElementos.SelectedItems)
{
MiColeccion.RemoveAt(GVElementos.Items.IndexOf(elItem));
}
ElementoSQL.Sincronizar(MiColeccion);
}
当我运行它并触发该方法时,我收到以下错误(翻译自西班牙语):
An exception of type 'System.InvalidCastException' occurred
in Lista.exe but was not handled in user code
Additional information: Unable to convert an object of
type 'System.String' to the type 'Windows.UI.Xaml.Controls.GridViewItem'.
当程序中断时,Visual Studio会使用foreach语句突出显示该行。
“GVElementos”是一个XAML GridView
“GridViewItem”和“GVElementos.SelectedItems”类型的“elItem”不是“GridViewItem”类型的元素集合吗?
我究竟做错了什么?有没有其他方法来迭代GridView?我来自ASP.NET,这种做法很有意义。
答案 0 :(得分:1)
这个例外非常明确。您应该注意消息,而不是粘贴先前工作实现中的代码。 特别是如果您的实施来自其他框架或环境!
基本上,正如大家在你的问题的评论中所建议的那样,并且异常表明你正在从字符串到GridViewItem进行无效的转换。
尝试执行以下操作:
foreach (string elItem in GVElementos.SelectedItems)
{
MiColeccion.RemoveAt(GVElementos.Items.IndexOf(elItem));
}
如果您阅读控件的文档,您将了解每个项目都是字符串对象。
这是一个更具体的例子:http://code.msdn.microsoft.com/windowsapps/ListViewSimple-d5fc27dd