如何在CollectionView中存储值

时间:2019-06-10 07:37:15

标签: xaml xamarin xamarin.forms binding

我有一个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>

我无法获得参数,请帮忙。

3 个答案:

答案 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;

    }