wpf datagrid实现全选功能
时间: 2023-09-01 12:11:40 浏览: 142
datagrid全选功能控件
要实现WPF DataGrid的全选功能,可以在DataGrid的Header中添加一个CheckBox,当该CheckBox被选中时,遍历DataGrid的所有行,并将每行的CheckBox选中。
以下是一个示例代码,实现了DataGrid的全选功能:
```xml
<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<CheckBox x:Name="chkSelectAll" Click="chkSelectAll_Click"/>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTextColumn Header="Age" Binding="{Binding Age}" />
</DataGrid.Columns>
</DataGrid>
```
在代码中,我们为DataGrid添加了一个模板列,该模板列包含一个CheckBox。在HeaderTemplate中,我们使用了一个命名的CheckBox,用于在后续代码中引用。
接下来,在DataGrid的DataContext中,我们需要添加一个IsSelected属性,用于存储每行CheckBox的选中状态:
```csharp
public class ItemViewModel : INotifyPropertyChanged
{
private bool _isSelected;
public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected = value;
OnPropertyChanged("IsSelected");
}
}
public string Name { get; set; }
public int Age { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
public class MainWindowViewModel
{
public ObservableCollection<ItemViewModel> Items { get; set; }
public MainWindowViewModel()
{
Items = new ObservableCollection<ItemViewModel>()
{
new ItemViewModel() { Name = "John", Age = 30 },
new ItemViewModel() { Name = "Jane", Age = 25 },
new ItemViewModel() { Name = "Bob", Age = 35 }
};
}
}
```
最后,在代码中添加Click事件处理程序,用于处理CheckBox的选中状态:
```csharp
private void chkSelectAll_Click(object sender, RoutedEventArgs e)
{
var chk = sender as CheckBox;
foreach (var item in Items)
{
item.IsSelected = chk.IsChecked.Value;
}
}
```
在事件处理程序中,我们首先获取发送事件的CheckBox。然后,我们遍历DataGrid的所有行,并将每行的CheckBox选中状态设置为发送事件的CheckBox的选中状态。
现在,当用户选中DataGrid的Header中的CheckBox时,所有行的CheckBox将被选中。
阅读全文