我有一个CollectionView
列表,想为每个项目设置一个单独的值,当单击它时可以获取该值。
但是似乎没有这种属性应该怎么办?
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid Padding="5,5" HeightRequest="55">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.134*" />
<ColumnDefinition Width="0.489*" />
<ColumnDefinition Width="0.256*" />
</Grid.ColumnDefinitions>
<Grid.GestureRecognizers>
<TapGestureRecognizer CommandParameter="{Binding Id}" Tapped="Handle_Tapped" />
</Grid.GestureRecognizers>
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
我无法获得参数,请帮忙。
答案 0 :(得分:1)
当您单击某项时,默认情况下,event参数会获取选定的数据,因此您无需id即可获得所需要做的一切:
private void Handle_Tapped(object sender, System.EventArgs e)
{
var clickedData=(e as ItemTappedEventArgs).Item as YourDataType;
}
其中YourDataType
是绑定到CollectionView的Type
。
答案 1 :(得分:1)
CollectionView
提供了SelectedItem
可绑定的属性。设置该属性后,您可以绑定到该属性并执行所需的任何操作。
如果您要坚持某个事件,CollectionView
还提供一个SelectionChanged
事件,该事件在SelectedItem
每次更改时都会触发,并且每次都会传递选中的项目作为参数。
这两种方法都不需要在CollectionView
中为每个视图单元都具有轻击手势识别器。
答案 2 :(得分:0)
尝试
private void TapGestureRecognizer_Tapped(object sender, EventArgs e)
{
Grid h = sender as Grid;
var m = h.BindingContext as YourModelType;
}