循环通过GridView.SelectedItems时出现System.InvalidCastException

时间:2013-02-24 04:27:58

标签: c# xaml microsoft-metro windows-store-apps

我正在编写一个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,这种做法很有意义。

1 个答案:

答案 0 :(得分:1)

这个例外非常明确。您应该注意消息,而不是粘贴先前工作实现中的代码。 特别是如果您的实施来自其他框架或环境!

基本上,正如大家在你的问题的评论中所建议的那样,并且异常表明你正在从字符串到GridViewItem进行无效的转换。

尝试执行以下操作:

foreach (string elItem in GVElementos.SelectedItems)
{
     MiColeccion.RemoveAt(GVElementos.Items.IndexOf(elItem));
}

如果您阅读控件的文档,您将了解每个项目都是字符串对象。

这是一个快速入门链接:http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh780650.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2

这是一个更具体的例子:http://code.msdn.microsoft.com/windowsapps/ListViewSimple-d5fc27dd