列表视图中的复选框-单击复选框标记列表视图行

本文关键字:列表 复选框 视图 单击 | 更新日期: 2023-09-27 18:02:37

我有一个列表视图,像这样的一个列:

<ListView.View>
   <GridView>
      <GridViewColumn x:Name="OnOffSwitch" Header="Enabled" Width="118">
          <GridViewColumn.CellTemplate>
              <DataTemplate>
                  <CheckBox Click="chkb_Click">
                      <CheckBox.Style>
                          <Style TargetType="CheckBox">
                              <Style.Triggers>
                                    <Trigger Property="IsMouseOver" Value="true">
                                        <Setter Property="Cursor" Value="Hand" />
                                    </Trigger>
                              </Style.Triggers>
                           </Style>
                      </CheckBox.Style>
                  </CheckBox>
               </DataTemplate>
          </GridViewColumn.CellTemplate>
      </GridViewColumn>
   </GridView>
</ListView.View>

和click事件:

private void chkb_Click(object sender, RoutedEventArgs e)
    {
        startSomething = myList.SelectedItem;
    }

我的问题是,当我在列表视图中没有一行"标记"并按下复选框时,没有任何事情发生,因为我没有selectedItem。或者如果我有几条线,标记第1行,然后尝试按第2行上的复选框。它从错误的行开始,然后是我按下的行。

我能想到的最简单的修复是确保当我按下复选框时,我希望它标记我按下的复选框所在的行。但我在这方面有问题。

有人能帮忙吗?

列表视图中的复选框-单击复选框标记列表视图行

为绑定到列表视图项的复选框添加一个标签值

<CheckBox Click="chkb_Click" Tag="{Binding}">

,您可以在单击处理程序中访问复选框所属的项(不需要选择之前的项):

private void chkb_Click(object sender, RoutedEventArgs e)
{
    var startSomething = (sender as FrameworkElement).Tag;
}