获取动态膨胀时选中了ListView中的哪个复选框

问题描述

我有此列表视图:

            <ListView x:Name="listview_brouch" HasUnevenRows="true" Grid.Row="1">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>

                            <Grid>
                                <Grid.ColumnDeFinitions>
                                    <ColumnDeFinition Width="4*"/>
                                    <ColumnDeFinition Width="*"/>
                                </Grid.ColumnDeFinitions>

                                <Grid.RowDeFinitions>
                                    <RowDeFinition Height="auto"/>
                                </Grid.RowDeFinitions>
                                
                                <Label 
                                    Grid.Column="0"
                                    Padding="0,10,10"
                                    FontSize="16"
                                    HorizontalOptions="Start"
                                    VerticalOptions="Start"
                                    FontFamily="ButtonFont"
                                    Text="{Binding title}"
                                    TextColor="Black"
                                    />

                                <CheckBox
                                     CheckedChanged="CheckBox_CheckedChanged"
                                   VerticalOptions="Center"  
                                    HorizontalOptions="Center"
                                    Grid.Column="1"
                                    Color="Aqua"/>

                            </Grid>
                            

                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

它由一个标签一个复选框组成。我给这样的listview数据:

    private void FillLists()
    {
        List<SubCategories> brouch = new List<SubCategories>();

        foreach (var e in subCategories)
        {
            if(e.IDfromCategories == categories[0].mainCategoryID)
                brouch.Add(e);
        }

        listview_brouch.ItemsSource = brouch;

    }

现在,该列表因brouch中有多少项而显得过高

我现在还为brouch中的项目添加了尽可能多的复选框

现在,我可以像在复选框中添加事件处理程序了。

但是,每个复选框都是相同的。我需要知道复选框对应的对象brouch中的哪个项目已被勾选。

brouch中有三项

ITEMNAME 1 ITENNAME 2 ITENNAME 3

当我选中复选框3时,我需要知道这是来自列表视图中还包含ITEMNAME 3的行。

我该如何实现?

谢谢!

解决方法

使用BindingContext中的sender

protected void CheckBox_CheckedChanged(object sender,EventArgs args)
{
  var check = (Checkbox)sender;
  var item = (SubCategories)check.BindingContext;

  // then item contains the object for the given row
}