wpf - DataTemplate 内的 ContentControl 两种方式绑定(bind)不起作用?

标签 wpf xaml data-binding datatemplate contentcontrol

我已经为数据网格列设置了一个可重用的数据模板“DataGridCheckBoxEdit”。通过 ContentControl 以一种方式绑定(bind)到它就像一种魅力。直接绑定(bind)有两种正确的工作方式。但是,在该 DataTemplate 中从 ContentControl 进行两种绑定(bind)是行不通的。

以下是片段:

<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>

正如我所说,绑定(bind)的一种方式就像一个魅力......但将数据返回到属性却不然。

当然,放置它而不可重复使用:

<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>

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

我做错了什么?

谢谢!

弗拉丹

最佳答案

您的绑定(bind)刚刚被破坏(请参阅 Visual Studio 的输出窗口以了解相应的错误),您不想绑定(bind)到 DataContext.Content 而只是绑定(bind)到 ContentDataContext 将是该行中的对象,而不是 ContentControl 本身。

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

{Binding Content, RelativeSource={RelativeSource AncestorType=ContentControl}}

关于wpf - DataTemplate 内的 ContentControl 两种方式绑定(bind)不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7548332/

相关文章:

wpf - 错误 "Specified element is already the logical child of another element"?

WPF + PRISM - 显示带有控件的模式弹出窗口?

javascript - 如何获取要绑定(bind)到对象(模型)的多个单选按钮的选定值?

apache-flex - [RemoteClass] 在 Flex Actionscript 中如何工作 我可以将它用于自定义数据绑定(bind)吗?

wpf - 使用 DataBinding 值的 MarkupExtension

c# - 完全模态 WPF 窗口?

c# - 从 Windows 窗体应用程序打开 wpf 窗口时缺少图像

c# - 没有为控件模板中的数据网格设置依赖属性

wpf - 如何在 slider 值更改时使 TextBlock.Text = Slider.Value

c# - 如何在 WPF 多选项卡 UI 中使用模板?