问题描述
我有此列表视图:
<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
中有三项
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
}