从 GridView 中获取选定的项目

Get Selected Items from a GridView

我有一个这样的 GridView:

<GridView x:Name="MyGrid" ItemsSource="{x:Bind Wallpapers}" SelectionMode="Multiple">
    <GridView.ItemTemplate>
        <DataTemplate x:DataType="data:ImageItem">
            <Image Width="150" Height="150" Source="{x:Bind img}" Tag="{x:Bind TagIndex}"/>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

我需要获取选定的图像控件以获得它们的标签 属性。 我试过这样:

foreach (Image img in MyGrid.SelectedItems)
{
    int index = img.Tag as int;
}

但我得到 System.InvalidCastException。我该怎么做?

编辑:删除旧答案。

尝试这样的事情

foreach(var item in MyGrid.SelectedItems)
{
    var image = item as TheTypeInItemsSource;//This is the type you have used in ItemsSource
    int index = image.TagIndex;
}

我这台电脑上没有 Win10,现在无法测试它,所以我不确定它是否有效。

GridView 的SelectedItems 与ItemsSource 中的SelectedItems 类型相同。根据我的理解,您作为 GridView 的源提供的项目类型包含一个图像和一个整数,即 TagIndex。只需获取项目的 TagIndex 而不是 Image 控件中的 Tag。

您收到 InvalidCast 异常,因为 gridview SelectedItems 集合的成员与 gridview ItemsSource 属性 绑定到的集合中的项目类型相同(给定示例中的 ImageItem)。

因此,可以使用以下代码直接获取标签索引:

foreach (ImageItem imgItem in MyGrid.SelectedItems)
{
    int index = imgItem.TagIndex;
}

或使用 var 关键字:

foreach (var imgItem in MyGrid.SelectedItems)
{
    var index = imgItem.TagIndex;
}