2

我为数据网格列设置了一个可重用的数据模板“DataGridCheckBoxEdit”。以一种方式绑定到它就像通过 ContentControl 的魅力一样。绑定直接以两种方式正确工作。但是,从 ContentControl 在该 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>

也很好用,并且可以双向工作。

我究竟做错了什么?

谢谢!

弗拉丹

4

1 回答 1

4

您的绑定刚刚损坏(有关相应错误,请参见 Visual Studio 的输出窗口),您不想绑定到,DataContext.Content但只是ContentDataContext将是该行中的对象而不是其ContentControl本身。

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

{Binding Content, RelativeSource={RelativeSource AncestorType=ContentControl}}
于 2011-09-25T21:07:59.243 回答