动态应用或不应用 DataTemplate

Apply or not a DataTemplate on the fly

我有一个带有列数据模板的网格,我想根据其中的复选框勾选应用(或不应用)header。

虽然不知道如何处理这个问题。某处会有启用标志吗?

<dxg:GridControl>
    <dxg:GridControl.Columns>
        <dxg:GridColumn>
            <dxg:GridColumn.HeaderTemplate>
                <DataTemplate>
                    <CheckBox Name="StatusCheck" Content="Status" />
                </DataTemplate>
            </dxg:GridColumn.HeaderTemplate>
            <dxg:GridColumn.CellTemplate>
                <DataTemplate>
                    ...
                </DataTemplate>
            </dxg:GridColumn.CellTemplate>

提前致谢!

您似乎在使用第三方控件 (dxg:...)。因此,您必须查看它的文档才能确定。

大多数模板化控件的数据模板都有 TemplateSelector 属性,您可以在其中传递 DataTemplateSelector.

如果不是这种情况,您仍然可以将自定义控件放入 header,这会根据您的数据更改其可视化效果。

第三个选项是,根据您的数据设置复选框的可见性。

凯的回答好像不错。但是添加我所做的以及我已经实现的不同。

我的想法是在 VM 中创建一个 属性,绑定到复选框并将其与模板挂钩。诀窍是要将它挂在网格中,我必须通过包含 属性 的 ElementName 查看 'ancestor',此处 MyControl:

<dxg:GridControl.Columns>
    <dxg:GridColumn>
      <dxg:GridColumn.HeaderTemplate>
        <DataTemplate>
            <CheckBox x:Name="StatusCheck" IsChecked="{Binding Path=ShowStatusIcon, ElementName=MyControl}" Content="Show icon"/>
        </DataTemplate>
      </dxg:GridColumn.HeaderTemplate>
      <dxg:GridColumn.CellTemplate>
        <DataTemplate>
            <DataTemplate.Triggers>
              <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                  <Condition ... /> <!-- Other condition that I need -->
                  <Condition Binding="{Binding Path=DataContext.ShowStatusIcon, ElementName=MyControl}" Value="True" />
                  <Condition ... /> <!-- Other condition that I needed for the template to be applied -->
                </MultiDataTrigger.Conditions>
                <Setter ... /> <!-- Fall back if condition not met, ie. other data template -->
              </MultiDataTrigger>