双击相应行时检查 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;
}
我有一个包含 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;
}