WPF - DataGridCheckBoxColumn: How to give ElementName to DataGridCell and CheckBox therein?

复制代码
<Window.Resources>
         <Style x:Key="cell" TargetType="DataGridCell">
             <Setter Property="Background" Value="LightBlue"/>
         </Style>
     </Window.Resources>
     <StackPanel>
         <TextBlock Name="tb" Text="hello" Width="150" Background="LightSteelBlue"/>
         <DataGrid Name="dg" ItemsSource="{Binding Persons}" AutoGenerateColumns="False"  CellStyle="{StaticResource cell}">
             <DataGrid.Resources>
                 <Style x:Key="BackgroundColourStyle" TargetType="{x:Type CheckBox}">
                     <Style.Triggers>
                         <Trigger Property="IsChecked" Value="True">
                             <Setter Property="Background" Value="LightGreen" />
                         </Trigger>
                     </Style.Triggers>
                 </Style>
             </DataGrid.Resources>
             <DataGrid.Columns>
                 <DataGridTextColumn Header="ID" Binding="{Binding ID}"  />
                 <DataGridTextColumn x:Name="Name1" Header="Name" Binding="{Binding Name}"/>
                 <DataGridCheckBoxColumn x:Name="check" Header="{Binding ElementName=Name1,Path= Header}"  Binding="{Binding Check}"  ElementStyle="{StaticResource BackgroundColourStyle }"/>
                 <DataGridTemplateColumn x:Name="Check" >
                     <DataGridTemplateColumn.Header >
                         <CheckBox Content="SelectAll" x:Name="headerCheckBox"  Background="{Binding ElementName=tb,Path=Background}" Width="{Binding ElementName=tb ,Path=Width}"/>
                     </DataGridTemplateColumn.Header>
                     <DataGridTemplateColumn.CellTemplate >
                         <DataTemplate>
                             <CheckBox x:Name="CheckSelected" Background="Orange" IsChecked="{Binding IsChecked,ElementName=headerCheckBox,Mode=OneWay}"/>
                         </DataTemplate>
                     </DataGridTemplateColumn.CellTemplate>
                 </DataGridTemplateColumn>
             </DataGrid.Columns>
         </DataGrid>
     </StackPanel>
复制代码
复制代码
public partial class MainWindow : Window
   {
     public ViewMode viewmodel;
     public MainWindow()
     {
       InitializeComponent();
       viewmodel = new ViewMode();
    
       this.DataContext = viewmodel;
     }
    
   }
   public class ViewMode : INotifyPropertyChanged
   {
     public ObservableCollection<Person> Persons { get; set; }
     public ViewMode()
     {
       Persons = new ObservableCollection<Person>();
       Persons.Add(new Person { ID = 1, Name = "man", Check=true});
       Persons.Add(new Person { ID = 2, Name = "john", Check = true});
       Persons.Add(new Person { ID = 3, Name = "jo" , Check = false });
     }
       
     protected void OnPropertyChanged(string porpName)
     {
       var temp = PropertyChanged;
       if (temp != null)
         temp(this, new PropertyChangedEventArgs(porpName));
     }
     public event PropertyChangedEventHandler PropertyChanged;
   }
   public class Person
   {
     public int ID { get; set; }
     public String Name { get; set; }
     public bool Check { get; set; }
   }
复制代码

 

 

posted @   simadi  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2018-12-28 每周工作4小时,蒂莫西·费里斯 最理想的工作方式和生活方式,QQ群666243547
2018-12-28 .NET Core 指南 官方
点击右上角即可分享
微信分享提示