0

我想使用 StringFormat 在 DataGrid 中显示我的数据。对象具有我想使用的格式字符串的属性...例如“{0:0.##} mmol/l”或“{0:0.##} mg/dl”来显示结果在不同的单位。

XAML:

<DataGrid ItemsSource="{Binding Results}">
   <DataGrid.Columns>
     <DataGridTextColumn Header="Value" Binding="{Binding Value, Converter={StaticResource stringFormatConverter}}" />

C# 中的转换器:

public class StringFormatConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return string.Format("{0:0.##} mmol/l", value);
    }
    [...]
}

如何告诉转换器使用格式字符串,它是我绑定到的项目的属性,而不是当前版本的转换器中的格式字符串?

编辑:结果是 Result 的 ObservableCollection,看起来像

public class Result
{
  public double Value {get; set; }
  public string Key {get; set; }
  public string FormatString {get; set; }
  [...]
}
4

1 回答 1

1

您可以将整个对象传递给转换器而不是其Value属性:

<DataGridTextColumn Header="Value" Binding="{Binding Converter={StaticResource stringFormatConverter}}" />

然后,您可以更改转换器以根据给定对象格式化字符串:

public class StringFormatConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var result = (Result)value;
        return string.Format(result.FormatString, result.Value);
    }
}

另一种可能的解决方案是让Result类公开另一个属性,该属性将返回格式化值,然后绑定FormattedValue(没有转换器):

public class Result
{
    public double Value { get; set; }
    public string Key { get; set; }
    public string FormatString { get; set; }

    public string FormattedValue
    {
        get { return string.Format(FormatString, Value); }
    }
}
于 2012-11-21T19:25:54.557 回答