DataConmplate中的ContentControl双向绑定无法正常工作?

时间:2011-09-25 20:20:58

标签: wpf xaml data-binding datatemplate contentcontrol

我为datagrid列设置了可重用的datatemplate“DataGridCheckBoxEdit”。绑定到它的方式就像通过ContentControl的魅力一样。绑定直接正确地双向工作。但是,在ContentTetrol中,在DataTemplate中双向绑定将无法正常工作。

以下是摘录:

<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ContentControl Content="{Binding Path=IsMadeAvailable, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ContentTemplate="{StaticResource     DataGridCheckBoxEdit}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>

和可重复使用的模板:

<DataTemplate x:Key="DataGridCheckBoxEdit">
<CheckBox Name="CheckBoxControl" IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContentControl}, Path=DataContext.Content, Mode=TwoWay, BindsDirectlyToSource=True, UpdateSourceTrigger=PropertyChanged}" Margin="8,4,2,2" />
<DataTemplate.Triggers>
<Trigger SourceName="CheckBoxControl" Property="IsVisible" Value="True">
<Setter TargetName="CheckBoxControl" Property="FocusManager.FocusedElement" Value="{Binding ElementName=CheckBoxControl}"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>

正如我所说,单向绑定就像魅力一样...但是将数据恢复到属性却没有。

当然,不能重复使用它:

<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<CheckBox Name="GasIsAvailableCheckBox" IsChecked="{Binding Path=IsMadeAvailable, UpdateSourceTrigger=PropertyChanged}" Margin="8,4,2,2" />
<DataTemplate.Triggers>
<Trigger SourceName="GasIsAvailableCheckBox" Property="IsVisible" Value="True">
<Setter TargetName="GasIsAvailableCheckBox" Property="FocusManager.FocusedElement" Value="{Binding ElementName=GasIsAvailableCheckBox}"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>

也很有效,并且双向工作。

我做错了什么?

谢谢!

弗拉丹

1 个答案:

答案 0 :(得分:2)

您的绑定刚刚破解(请参阅Visual Studio的输出窗口以了解相应的错误),您不希望绑定到DataContext.Content而只绑定ContentDataContext将是ContentControl该行中的对象而不是{Binding Content, RelativeSource={RelativeSource AncestorType=ContentControl}} 本身。

在可重用模板的绑定路径中更改它,它将起作用。您还会将许多属性设置为默认情况下已有的值,这将是最小版本:

{{1}}