【问题标题】:How to use StringFormat via binding in a DataGridTextColumn?如何通过在 DataGridTextColumn 中绑定来使用 StringFormat?
【发布时间】:2012-11-21 18:30:01
【问题描述】:

我想使用 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);
    }
    [...]
}

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

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

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

【问题讨论】:

  • 哪个对象具有格式字符串的属性?如果 results 是 IEnumerable,那么 X 是什么,它有什么属性?

标签: wpf mvvm binding string-formatting


【解决方案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); }
    }
}

【讨论】:

  • 第一个建议不起作用...该值无法转换为 Result,因为它是 double 类型。我已经记住了第二个建议,但正在寻找一些漂亮的转换器解决方案,但有时“保持简单”仍然是最好的方法;)谢谢!
  • 请注意,在第一个解决方案中,您应该更改绑定,即不要绑定到Value,而是绑定到数据上下文。仔细看看 - 该解决方案应该有效。
猜你喜欢
  • 2012-05-23
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 2012-06-16
  • 2019-02-10
  • 2017-02-16
  • 2011-12-21
相关资源
最近更新 更多