首页 > 解决方案 > WPF Datagrid:通过 UI 编辑已使用 ValueConverter 转换的值

问题描述

我有一个带有“总金额”列的数据网格。这是一种双精度类型,由 IValueConverter 转换为带有“$”符号和逗号的货币类型。

(1) 但是单元格需要是可编辑的,以便用户可以更改包括金额在内的行。我该怎么做呢?现在,编辑会冻结应用程序(并不奇怪),因为我不知道如何处理这个问题。

(2) 如果用户添加了一个新行并添加了一个新项目。如何在值前加上 $ 符号并在用户键入时在相关位置添加逗号?

注意:一种解决方法是我猜想将 TotalAmount 属性作为字符串本身,并在我需要执行任何操作时转换为双精度。还要添加验证以确保用户输入双精度类型。但我仍然不知道如何实施第 2 点。

标签: c#wpfdata-bindingconvertersivalueconverter

解决方案


这里的关键是使用CellTemplate&CellEditingTemplate

感谢 - Link1 & Link2

我的解决方案是以上两者的结合——

<DataGridTemplateColumn Header="Total Amount">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=TotalAmount, Converter={StaticResource CurrencyConverter}}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <TextBox Text="{Binding Path=TotalAmount, StringFormat=\{0:N2\},UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

推荐阅读