DataGridColumnHeader CheckBox IsChecked Binding不起作用

时间:2014-02-07 10:24:07

标签: wpf checkbox binding

全部 - 实现了cource的UI,INotifyPropertyChanged接口的一部分,所有Bindings都可以正常工作。但由于某种原因,一个Binding不起作用。在这里。

IsChecked="{Binding ArchiveDocsLinkedChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >

这是我的XAML:

<DataGridTemplateColumn Width="Auto">
   <DataGridTemplateColumn.HeaderStyle>
      <Style TargetType="{x:Type DataGridColumnHeader}">
         <Setter Property="Template">
            <Setter.Value>
               <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                  <CheckBox Margin="0,2,3,0" Checked="ArchiveDocsLinkedMainCheckBoxChecked"  Unchecked="ArchiveDocsLinkedMainCheckBoxUnchecked" HorizontalAlignment="Center"  IsChecked="{Binding ArchiveDocsLinkedChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
                     <CheckBox.ToolTip>Выделить все/Снять выделение</CheckBox.ToolTip>
                  </CheckBox>
               </ControlTemplate>
            </Setter.Value>
         </Setter>
      </Style>
   </DataGridTemplateColumn.HeaderStyle>
   <DataGridTemplateColumn.CellTemplate>
      <DataTemplate>
         <CheckBox IsChecked="{Binding Path=IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center" Name="theCheckbox"/>
      </DataTemplate>
   </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>   

这是我的代码隐藏字段+属性:

private Boolean _archiveDocsLinkedChecked
public Boolean ArchiveDocsLinkedChecked
{
    get
    {
        return _archiveDocsLinkedChecked;
    }
    set
    {
        _archiveDocsLinkedChecked = value;
        RaisePropertyChanged("ArchiveDocsLinkedChecked");
    }
}        

我想这是因为Binding在DataGridColumnHeader的模板中。对于绑定来说,这并不是一个很好的标准。如何正确指定Binding? THX!

1 个答案:

答案 0 :(得分:1)

我解决了这个问题。

绑定必须如下所示:

IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, 
                                                                Path=ArchiveDocsLinkedChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">

显然,当你在ControlTemplate时,你在DataContext ControlTemplate之内。因此,您必须进入上限才能访问Window's DataContext:)

P.S。为什么,当我复制并粘贴一些代码时,它会转移到右侧? ctrl + K没有解决这个问题,我强制手动调整代码...