You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF如何为DataTemplate编写通用绑定实现多GridColumn复用

实现方案

你可以直接复用DevExpress GridControl单元格上下文的内置属性实现通用模板,无需复杂的自定义逻辑:

  1. 定义唯一的通用DataTemplate
<DataTemplate x:Key="CommonGridCell">
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
        <dxe:TextEdit EditValue="{Binding Value.NewValue}" Style="{StaticResource PartStyle}"  />
        <dxe:TextEdit EditValue="{Binding Value.OldValue}" Style="{StaticResource PartStyle}" />
    </StackPanel>
</DataTemplate>
  1. 所有GridColumn统一引用这个模板即可
<Grid >
    <dxg:GridControl ItemsSource="{Binding DataGridModels}" >
        <dxg:GridColumn x:Name="UnitCol" FieldName="Unit"  CellTemplate="{StaticResource CommonGridCell}"/>
        <dxg:GridColumn x:Name="PreCol" FieldName="Pre"  CellTemplate="{StaticResource CommonGridCell}"/>
        <dxg:GridColumn x:Name="ExCCol" FieldName="Execution" CellTemplate="{StaticResource CommonGridCell}"/>
    </dxg:GridControl>
</Grid>

原理说明

DevExpress GridControl的CellTemplate默认数据上下文是GridCellData类型对象,其中Value属性会自动对应当前列FieldName指向的行属性值,你设置的FieldName是Unit时,Value就等于Row.Unit,以此类推,因此直接绑定Value下的NewValue和OldValue就能适配所有对应结构的列。

如果你的行对象是没有显式属性的动态类型,还可以用索引器写法适配:

<DataTemplate x:Key="CommonGridCell">
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
        <dxe:TextEdit EditValue="{Binding Row[Column.FieldName].NewValue}" Style="{StaticResource PartStyle}"  />
        <dxe:TextEdit EditValue="{Binding Row[Column.FieldName].OldValue}" Style="{StaticResource PartStyle}" />
    </StackPanel>
</DataTemplate>

内容的提问来源于stack exchange,提问作者Aziz Alzayed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:15:04