c# - WPF DataGrid 中的自定义 StringFormat

标签 c# wpf datagrid

在 DataGrid 中设置自定义列格式的最有效方法是什么?我不能使用以下 StringFormat,因为我的复杂格式设置还取决于此 ViewModel 的其他一些属性。 (例如,价格格式有一些基于不同市场的复杂格式逻辑。)

Binding ="{Binding Price, StringFormat='{}{0:#,##0.0##}'}"

最佳答案

您可以将 MultiBinding 与转换器一起使用。首先定义一个 IMultiValueConverter,它使用第二个中指定的格式来格式化第一个值:

public class FormatConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        // some error checking for values.Length etc
        return String.Format(values[1].ToString(), values[0]);
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

现在将您的 ViewModel 属性和格式绑定(bind)到同一事物:

<MultiBinding Converter="{StaticResource formatter}">
    <Binding Path="Price" />
    <Binding Path="PriceFormat" />
</MultiBinding>

关于此的好处是价格的格式化逻辑可以存在于 ViewModel 中并且可以测试。否则,您可以将该逻辑移动到转换器中并传入它需要的任何其他属性。

关于c# - WPF DataGrid 中的自定义 StringFormat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2862275/

相关文章:

c# - 通过 ManagedObjectReference 查询 VMWare?

c# - DataTemplate 中的绑定(bind)命令

c# - 如何更改 WPF DataGrid 中某些单元格的背景颜色?

c# - .Net 核心版本控制 : Folder structure/namespaces

c# - SelectSingleNode 似乎在搜索 parent 和 sibling

wpf - 当 ContentControl 的内容为 null 或为空时,显示默认的 DataTemplate?

c# - 使用模板 WPF 为 DataGrid 动态生成行和列标题

c# - 如何在 WPF 中创建带有可编辑文本框的 ListView ?

c# - mvc4 下拉列表中的枚举值

c# - 导航属性丢失?