我想使用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);
}
[...]
}
如何告诉转换器使用格式字符串,这是我绑定的项目的属性而不是当前版本的转换器中的属性?
修改: 结果是结果的ObservableCollection,看起来像
public class Result
{
public double Value {get; set; }
public string Key {get; set; }
public string FormatString {get; set; }
[...]
}
答案 0 :(得分: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); }
}
}