当DataGridTextColumn进入编辑模式时,是否有一种方法可以更改其绑定?

3
我真正想要做的是更改DataGridTextColumn上特定绑定的StringFormat,但由于这是由绑定定义的,我认为我需要以某种方式更改整个绑定。
我希望避免使用DataGridTemplateColumn的原因是,DataGridTextColumn似乎具有一些内置的基本功能,如果我使用DataGridTemplateColumn,我将失去这些功能并且需要编写代码来手动处理,例如:
  • 能够在非编辑模式单元格中开始输入,从而自动将单元格放入编辑模式
  • 复制和粘贴数据(从DataGrid和Excel中)
当前绑定(期望的显示/读取模式绑定):
Binding="{Binding ADecimalNumber StringFormat={StaticResource ReadDecimalFormat}}"

期望的编辑模式绑定

Binding="{Binding ADecimalNumber StringFormat={StaticResource WriteDecimalFormat}}"

提醒一下,ReadDecimalFormat 的作用是以两位精度显示小数值,而WriteDecimalFormat 的作用是显示输入的原始小数值(保留所有数字的精度,大多数情况下为四位数)。

2个回答

4

我想我暂时已经让它工作了,目前正在测试中。

<DataGridTextColumn Header="Value" ClipboardContentBinding="{Binding ADecimalNumber}">
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="TextBlock">
            <Setter Property="Text" Value="{Binding ADecimalNumber, StringFormat={StaticResource ReadDecimalFormat}}"/>
        </Style>
    </DataGridTextColumn.ElementStyle>
    <DataGridTextColumn.EditingElementStyle>
        <Style TargetType="TextBox">
            <Setter Property="Text" Value="{Binding ADecimalNumber, StringFormat={StaticResource WriteDecimalFormat}}"/>
        </Style>
    </DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>

似乎该解决方案的自动复制和粘贴处理已不再工作,但 F2 编辑和输入编辑模式仍在工作。 - Jon Erickson
把那个说回去,复制/粘贴功能正常工作,只需要将ClipboardContentBinding设置为正确的绑定,例如"{Binding ADecimalNumber}"。我假设如果在DataGridTextColumn元素上设置了ClipboardContentBinding,则它默认为绑定,但在此解决方案中不再是这种情况,因此我们必须手动设置它。 - Jon Erickson

2
我能够使用元素样式来实现这一点,并检查我们是否正在编辑:
<DataGridTextColumn>
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="{x:Type TextBox}">
            <Setter Property="Text" Value="{Binding}" />
        </Style>
    </DataGridTextColumn.ElementStyle>


<DataGridTextColumn.EditingElementStyle>
    <Style TargetType="{x:Type TextBox}">
      <Setter Property="Text" Value="{Binding}" />
     </Style>
 </DataGridTextColumn.EditingElementStyle>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接