动态应用或不应用 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>
我有一个带有列数据模板的网格,我想根据其中的复选框勾选应用(或不应用)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>