在 xamarin 表单中的 CollectionView 的一行中收集 Button 的标识符

Collect the identifier of a Button in a row of a CollectionView in xamarin forms

我正在用 xamarin 表单开发应用程序,但在访问 CollectionView 中的按钮事件时遇到问题。对于每个被选中的按钮,根据它所在的行,它会用 id 做不同的事情。

我的 xaml CollectionView 代码如下:

        <CollectionView.ItemTemplate>
            <DataTemplate>
                <Grid Padding="10">

                        <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="10" />
                        <ColumnDefinition Width="120" />
                        <ColumnDefinition Width="100" />
                        <ColumnDefinition Width="250" />
                        <ColumnDefinition Width="85" />
                        <ColumnDefinition Width="70" />
                        <ColumnDefinition Width="70" />
                        </Grid.ColumnDefinitions>


                    <Label Grid.Column="1"
                        Text="{Binding id_cliente}"
                           TextColor="black"
                           VerticalOptions="CenterAndExpand"
                        FontAttributes="Bold" />
                    
                    <Label 
                        Grid.Column="2"
                        Text="{Binding categoria}"
                        FontAttributes="Italic"
                        VerticalOptions="CenterAndExpand"
                           TextColor="black"/>

                    <Label Grid.Column="3"
                        Text="{Binding descripcion}"
                           TextColor="black"
                           VerticalOptions="CenterAndExpand"
                        FontAttributes="Bold" />
                    
                    
                    <Label 
                        Grid.Column="4"
                        Text="{Binding estado}"
                           TextColor="Yellow"
                        VerticalOptions="CenterAndExpand"
                        FontAttributes="Bold" />


                        <Button Grid.Column="5" Text="Confirmar" BorderColor="#2b3c3c" BorderWidth="1" FontAttributes="Bold" BackgroundColor="#4ba862" TextColor="White"  HeightRequest="60" Margin="0,0,0,0" x:Name="btnconfirmar" Clicked="ButtonConfirmacion_Clicked" Command="{Binding id_trabajo}"/>
                        
                        <Button Grid.Column="6" Text="Asignar" BorderColor="#2b3c3c" BorderWidth="1" FontAttributes="Bold" BackgroundColor="#4ba862" TextColor="White"  HeightRequest="60" Margin="0,0,0,0" x:Name="btnasignar" Clicked="ButtonListaTrabajos_Clicked"/>

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

在该页面的 cs 代码中我有:

private void ButtonConfirmacion_Clicked(object sender, EventArgs e)
    {

        Trabajo selectedItem1 = e.CurrentSelection[0] as Trabajo;

    }

这段代码,当该行被选中时,如果它选择了已被选中的项目,则使用 OnSelectionChanged (sender, e) 方法。

您可以使用下面的代码获取连续的 x:Name 个按钮。

private void ButtonConfirmacion_Clicked(object sender, EventArgs e)
    {       

        var button = sender as Button;
        var elemets = (button.Parent as Grid).Children;

        foreach (var item in elemets)
        {
            if (item.GetType().Name == "Button")
            {                   
                var btn_name = item.StyleId;     
                
            }
        }

    }