WPF中DataGrid实现全选

来源:互联网 发布:言论自由的界限 知乎 编辑:程序博客网 时间:2024/05/16 14:33

方法一:使用模板列

前台代码如下

<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();





0 0
原创粉丝点击