xamarin - 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;
}
但这表现得很奇怪。第一次点击时,它确实给了我点击的正确项目。但是,如果我再次单击同一个项目,它就不会被触发。如果我之后单击另一个项目,该函数会再次触发,并给出正确的结果。如果我再次单击同一项目,则再次不会触发。
我还注意到,当我点击一个项目时,只有第一个和第三个项目会在该项目上获得这个“点击”动画。没有其他项目产生这个点击动画?
如何正确处理点击?
为什么这个动画是 item 1 和 item 3 独有的?
谢谢!
解决方案
试试这个
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; 表示您可以再次单击它,因为没有再次选择任何内容
推荐阅读
- javascript - 双图像背景在鼠标悬停时移动
- python - subprocess.run() 的键盘中断
- mysql - SQL 查询返回不正确的值
- apache-kafka - 如果在收到创建消息之前收到更新消息,如何处理 kafka 消息?
- r - 如何加起来最多一刻钟
- python - if 语句在歌词命令中不起作用
- batch-file - Batch/CMD - 更改正在运行的进程的核心亲和力
- java - 为什么 Java 的 double/float Math.min() 以这种方式实现?
- python - 过采样和欠采样方法是否适合构建好的模型?
- c# - Azure Cosmos DB (SQL API)。之后可以索引使用 IndexingDirective.Exclude 插入的文档吗?