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

同一属性绑定多转换器时底层源值被修改问题咨询

问题根因

  • 该问题由DevExpress GridControl的内部优化逻辑导致:当多个GridColumn未显式指定唯一的FieldName属性时,Grid会自动取Binding.Path的值作为FieldName,你两列绑定的Path都是RateValue,导致Grid内部将两列识别为同一个数据源字段的展示,出现取值覆盖冲突。
  • 额外的隐含问题:你当前用转换器把decimal值转成字符串返回,会导致Grid的内置排序、筛选功能失效(会按字符串规则而非数值规则处理)。

解决方案

方案1:快速修复当前绑定问题

给两个GridColumn分别设置互不重复的FieldName属性,仅作为Grid内部的唯一标识,不需要和数据源属性对应:

<dxg:GridColumn MinWidth="80" Header="Rate (%)" FieldName="RatePercentage">
    <dxg:GridColumn.Binding>
        <Binding Path="RateValue" Converter="{StaticResource DecimalToFourDecimalPlacesPercentageConverter}" Mode="OneWay" UpdateSourceTrigger="PropertyChanged"/>
    </dxg:GridColumn.Binding>
</dxg:GridColumn>

<dxg:GridColumn Header="Rate (Decimal)" FieldName="RateDecimal">
    <dxg:GridColumn.Binding>
        <Binding Path="RateValue" Converter="{StaticResource DecimalToFourDecimalPlacesConverter}" Mode="OneWay" UpdateSourceTrigger="PropertyChanged"/>
    </dxg:GridColumn.Binding>
</dxg:GridColumn>

方案2:更优实现(推荐,无需自定义转换器)

直接使用DevExpress GridColumn内置的格式化能力,性能更好,且保留数值类型的排序、筛选能力:

<dxg:GridColumn MinWidth="80" Header="Rate (%)" FieldName="RateValue" DisplayFormat="p4" AllowEditing="False"/>
<dxg:GridColumn Header="Rate (Decimal)" FieldName="RateValueDecimal" Binding="{Binding RateValue}" DisplayFormat="n4" AllowEditing="False"/>

额外建议

如果不需要编辑这两列,建议显式给列设置AllowEditing="False",避免用户触发编辑时调用你未实现的ConvertBack方法抛出异常。

内容的提问来源于stack exchange,提问作者Ciaran Martin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:06:01