首页 > 解决方案 > Xamarin.Forms 获取单击集合视图

问题描述

所以,我设置了这个collectionview:

       <CollectionView  
            SelectionMode="Single"
            Grid.Column="1"
              x:Name="listview_allAds" 
              BackgroundColor="#00000000" 
              VerticalScrollBarVisibility="Never"  >
            <CollectionView.ItemsLayout>
                <GridItemsLayout Orientation="Vertical" Span="2" />
                <!--Span is number of items in one row-->
            </CollectionView.ItemsLayout>

            
            <CollectionView.ItemTemplate>
                <DataTemplate>
                    <ContentView Padding="5,5,5,5"> <!--only way to set padding-->
                        
                        <Grid BackgroundColor="#00000000">

                            <BoxView BackgroundColor="White" 
                                 VerticalOptions="FillAndExpand" 
                                 HorizontalOptions="FillAndExpand"/>

                            <Grid>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="auto"/>
                                    <RowDefinition Height="auto"/>
                                    <RowDefinition Height="auto"/>
                                </Grid.RowDefinitions>

                                <BoxView BackgroundColor="#424242"
                                     HeightRequest="150"
                                     WidthRequest="80"/>

                                <Label 
                                    Grid.Row="1"
                                    Padding="0,0,0,0"
                                    Text="{Binding adresse}"
                                    FontSize="15"
                                    HorizontalOptions="Start"
                                    VerticalOptions="Center"
                                    FontFamily="Font_11"
                                    TextColor="Gray"
                                    />

                                <Grid Grid.Row="2">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="auto"/>
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>

                                    <Label 
                                        Grid.Column="0"
                                        Padding="0,0,0,0"
                                        Text="{Binding title}"
                                        FontSize="20"
                                        HorizontalOptions="Center"
                                        VerticalOptions="Start"
                                        FontFamily="Font_11"
                                        TextColor="#424242"
                                         />

                                    <Label 
                                        Grid.Column="1"
                                        Padding="0,0,0,0"
                                        Text="{Binding price}"
                                        FontSize="15"
                                        HorizontalOptions="Center"
                                        VerticalOptions="End"
                                        FontFamily="Font_11"
                                        TextColor="#424242"
                                         />

                                </Grid>

                            </Grid>

                        </Grid>

                    </ContentView>



                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>

这看起来像这样:

在此处输入图像描述

我试图简单地点击一个项目。我尝试使用 OnCollectionChanged,如下所示:

    private void listview_allAds_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        string current = (e.CurrentSelection.FirstOrDefault() as AdType)?.title;
    }

但这表现得很奇怪。第一次点击时,它确实给了我点击的正确项目。但是,如果我再次单击同一个项目,它就不会被触发。如果我之后单击另一个项目,该函数会再次触发,并给出正确的结果。如果我再次单击同一项目,则再次不会触发。

我还注意到,当我点击一个项目时,只有第一个和第三个项目会在该项目上获得这个“点击”动画。没有其他项目产生这个点击动画?

  1. 如何正确处理点击?

  2. 为什么这个动画是 item 1 和 item 3 独有的?

谢谢!

标签: xamarinxamarin.forms

解决方案


试试这个

 private void listview_allAds_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string current = (e.CurrentSelection.FirstOrDefault() as AdType)?.title;
     listview_allAds.SelectedItem = null;
}

使用 listview_allAds.SelectedItem = null; 表示您可以再次单击它,因为没有再次选择任何内容


推荐阅读