方法一:使用模板列
前台代码如下
<DataGrid Grid.Row="2" Name="dgPersonList" BorderThickness="0" Grid.ColumnSpan="2" Margin="0,5,0,0" SelectionChanged="dgPersonList_SelectionChanged">
<DataGrid.Columns >
<DataGridTemplateColumn Header="" Width="40">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Name="chk" VerticalAlignment="Center" HorizontalAlignment="Center" IsChecked="{Binding IsChecked,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns >
</DataGrid>
后台实现如下
DataGridTemplateColumn templeColumn = dgPersonList.Columns[0] as DataGridTemplateColumn;
FrameworkElement fwElement = dgPersonList.Columns[0].GetCellContent(dgPersonList.SelectedItem);
CheckBox cBox = templeColumn.CellTemplate.FindName("chk", fwElement) as CheckBox;
cBox.IsChecked = !cBox.IsChecked;
方法二:INotifyPropertyChanged属性通知
public class Person : INotifyPropertyChanged
{
private bool _IsChecked = false;
public bool IsChecked { get { return _IsChecked; } set { _IsChecked = value; NotifyPropertyChanged(); } }
public event PropertyChangedEventHandler PropertyChanged;
//此方法在每个属性的set中调用
//在可选参数propertyName上应用CallerMemberName特性
//调用此方法时,调用方的信息将替换为可选参数的参数,即在set中调用此方法,propertyName="当前属性的名称"
public void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
后台代码
var person = dgPersonList.SelectedItem as Person;
person.IsChecked = true;
题外话:
两种方法也可以混用,使用第一方法的前台,第二方法的后台,只需要加上
dgPersonList.Items.Refhresh();
本文介绍了两种在WPF中实现DataGrid全选功能的方法:一是通过使用模板列实现;二是利用INotifyPropertyChanged属性进行数据绑定更新。这两种方法可以结合使用,通过第一种方法设置前台界面,第二种方法处理后台数据更新。
2161

被折叠的 条评论
为什么被折叠?



