如何从具有选择模式=多个的网格视图中获取所选控件

本文关键字:视图 网格 获取 控件 有选择 模式 | 更新日期: 2023-09-27 18:34:24

我有一个这样的网格视图:

<GridView x:Name="list" ScrollViewer.VerticalScrollBarVisibility="Hidden" SelectionChanged="list_SelectionChanged" ItemsSource="{x:Bind Wallpapers}" SelectionMode="Multiple">
    <GridView.ItemTemplate>
        <DataTemplate x:DataType="data:ImageItem">
            <StackPanel>
                <Image FlyoutBase.AttachedFlyout="{StaticResource ImageMenuFlyout}" Width="150" Height="90" Source="{x:Bind img}" Tag="{x:Bind TagIndex}" Holding="Image_Holding" Tapped="Image_Tapped"/>
                <Image Source="used.png" Height="15" Margin="0,-15,0,0" HorizontalAlignment="Left" Width="44" Visibility="{x:Bind Used, Mode=OneWay}"/>
            </StackPanel>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

我需要进入GrifView的OnSelectionChanged方法,第二个图像控件的可见性。

我需要这个,因为如果用户选择至少一个具有第二个图像控件可见性的项目为"可见",我必须启用一个按钮。

如何从具有选择模式=多个的网格视图中获取所选控件

尝试重新创建您的示例。

我假设你有一个名为 ImageItem 的类。我创建了一个仅具有Used属性:

public class ImageItem
{
    public Visibility Used { get; set; }
}
我的观点

和你的观点基本一样,我用了不同的ItemsSource名称,只留在第二个Image控件的Visibility绑定中:

<GridView x:Name="list" ScrollViewer.VerticalScrollBarVisibility="Hidden" SelectionChanged="List_OnSelectionChanged" ItemsSource="{x:Bind Items}" SelectionMode="Multiple">
    <GridView.ItemTemplate>
        <DataTemplate x:DataType="local:ImageItem">
            <StackPanel>
                <Image Width="150" Height="90" />
                <Image Height="15" Margin="0,-15,0,0" HorizontalAlignment="Left" Width="44" Visibility="{x:Bind Used, Mode=OneWay}"  />
            </StackPanel>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

我将其绑定到以下集合:

Items = new ObservableCollection<ImageItem>
{
    new ImageItem() { Used = Visibility.Visible },
    new ImageItem() { Used = Visibility.Visible },
    new ImageItem() { Used = Visibility.Collapsed },
};

因此,只有第三项的第二个Image是隐藏的。

我的选择更改处理程序如下:

private void List_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var gridView = sender as GridView;
    if (gridView != null)
    {
        var isAtLeastOneVisible =
            gridView.SelectedItems.OfType<ImageItem>().Any(i => i.Used == Visibility.Visible);
    }
}

因此,如果至少选择列表中的第一项和/或第二项,则isAtLeastOneVisible为真,如果仅选择第三项,则为假。