双击相应行时检查 DataGrid 中的 CheckBox

Checking a CheckBox in a DataGrid when double clicking on the corresponding row

我有一个包含 3 个文本列和一个复选框列的 DataGrid :

<DataGrid x:Name="EquipmentArray" Style="{StaticResource DataGridEquipment}">
    <DataGrid.Columns>

        <DataGridTextColumn Header="Description" Binding="{Binding Description}"/>

        <DataGridTextColumn Header="IP Adress" Binding="{Binding IPAdress}"/>

        <DataGridTextColumn Header="Connection Type" Binding="{Binding ConnectionType}"/>

        <DataGridTemplateColumn Header="Choice">
             <DataGridTemplateColumn.CellTemplate>
                  <DataTemplate>
                       <CheckBox/>
                  </DataTemplate>
             </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

    </DataGridColumns>
</DataGrid>

我想做的是,当用户双击一行时,它会检查相应行中的 CheckBox。

private void DataGridRow_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (e.ClickCount == 2)
    {
        // checking the checkbox in the sender's row
    }
}

我该怎么做,最好的方法是什么?

您应该向您的数据模型添加一个布尔值 属性,例如 IsEnabled,并将其绑定到 CheckBox:

DataItem.cs

class DataItem : INotifyPropertyChanged
{
  // Let property raise the INotifyPropertyChanged.PropertyChanged event
  public bool IsEnabled { get; set; }
}

MainWindow.xaml

<DataGrid ItemsSource="{Binding DataItems}">
  <DataGrid.RowStyle>
    <Style TargetType="DataGridRow">
      <EventSetter Event="PreviewMouseDoubleClick"
                   Handler="OnDataGridRowPreviewMouseDoubleClick" />
    </Style>
  </DataGrid.RowStyle>

  <DataGrid.Columns>
    <DataGridTemplateColumn Header="Choice">
      <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
          <CheckBox IsChecked="{Binding IsEnabled}" />
        </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    </DataGridColumns>
</DataGrid>

MainWindow.xaml.cs

private void OnDataGridRowPreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
  var row = sender as DataGridRow;
  (row.Item as DataItem).IsEnabled = true;
}