全部 - 实现了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!
答案 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没有解决这个问题,我强制手动调整代码...