我会采取的一种方法是制作转换器。我给你做了一个只是为了宣传这个想法,但你可能应该修改它以满足你的需要。
public class CellUnitConverter : MarkupExtension, IValueConverter
{
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
public string Unit { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
//Checks both if the value is null or if the converter somehow gets used ahead of time
if (value == null || value == DependencyProperty.UnsetValue)
{
return string.Empty;
}
// You can place some rounding rules here
return $"{value} {Unit}";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
因为它使用MarkupExtension,所以你可以把它放在单元格的绑定中
Binding="{Binding Results, Converter={converters:CellUnitConverter Unit=CFM}}"
但是,如果您希望根据值使用不同的单位,您也可以将单位绑定到每个元素的另一个属性。
让我们显示DataItem 的集合,其中每个都有Title、Result、Unit。然后,将一列绑定到Title,将另一列绑定到Result,例如
Binding="{Binding Result, Converter={converters:CellUnitConverter Unit={Binding Unit}}}"
希望这指向解决方案。