它全部是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?太棒了!
发布于 2014-02-10 05:33:00
我解决了问题。
绑定必须如下所示:
IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}},
Path=ArchiveDocsLinkedChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">显然,当您在ControlTemplate时,您在DataContext of ControlTemplate中。因此,您必须到上层才能访问Window's DataContext :)
附注:为什么,当我复制和粘贴一些代码时,它似乎移到了右侧?ctrl+K解决不了这个问题,我强迫手动调整代码.
https://stackoverflow.com/questions/21625144
复制相似问题