You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAUI中CollectionView单项展开收起GUI实现方案(仅GUI层)

MAUI CollectionView 单项展开/收起实现方案

核心逻辑

利用CollectionView的SelectedItem唯一性,配合DataTrigger控制按钮区域的可见性,点击新项时自动替换选中项,实现旧项收起、新项展开的效果。

修改后的完整XAML代码

<CollectionView x:Name="ItemCollectionView"
                SelectedItem="{Binding SelectedMyItem}">
    <!-- 若ViewModel未定义SelectedMyItem,可仅保留x:Name供后续引用 -->
    <CollectionView.ItemTemplate>
        <DataTemplate x:DataType="models:MyItem">
            <StackLayout>
                <!-- 点击列表项区域触发选中切换 -->
                <Frame Margin="10,5">
                    <Frame.GestureRecognizers>
                        <TapGestureRecognizer 
                            Command="{Binding Source={x:Reference ItemCollectionView}, Path=SelectedItem}"
                            CommandParameter="{Binding .}"/>
                    </Frame.GestureRecognizers>
                    
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition/>
                            <ColumnDefinition/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition/>
                            <RowDefinition/>
                        </Grid.RowDefinitions>

                        <Label Text="{Binding Name}"/>
                        <Label Grid.Column="1" Text="{Binding Number}" HorizontalTextAlignment="End"/>
                        <Label Grid.Row="1" Text="{Binding Description}"/>
                    </Grid>
                </Frame>

                <!-- 选项按钮区域,默认隐藏 -->
                <Grid IsVisible="False" Margin="10,0,10,5">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>

                    <Button Text="Option 1" Margin="5"/>
                    <Button Grid.Column="1" Text="Option 2" Margin="5"/>

                    <!-- 通过DataTrigger控制显示/隐藏 -->
                    <Grid.Triggers>
                        <DataTrigger TargetType="Grid"
                                     Binding="{Binding Source={x:Reference ItemCollectionView}, Path=SelectedItem}"
                                     Value="{Binding .}">
                            <Setter Property="IsVisible" Value="True"/>
                        </DataTrigger>
                    </Grid.Triggers>
                </Grid>
            </StackLayout>
        </DataTemplate>
    </CollectionView.ItemTemplate>
</CollectionView>

关键细节说明

  • 点击Frame区域时,通过TapGestureRecognizer将当前项设置为CollectionView的SelectedItem,因为SelectedItem只能存在一个,切换时自动替换旧选中项
  • 按钮Grid默认隐藏,仅当当前项与CollectionView的SelectedItem匹配时,DataTrigger触发将IsVisible设为True
  • 完全基于GUI层面实现,无需修改ViewModel的业务逻辑,符合MVVM模式要求

可选优化:点击空白收起所有项

给页面添加点击手势,点击空白区域时清空选中项,收起所有按钮:

<ContentPage.GestureRecognizers>
    <TapGestureRecognizer 
        Command="{Binding Source={x:Reference ItemCollectionView}, Path=SelectedItem}"
        CommandParameter="{x:Null}"/>
</ContentPage.GestureRecognizers>

内容的提问来源于stack exchange,提问作者Somachr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:35:44