如何根据数据单位格式化DataGrid行

时间:2019-05-29 17:45:03

标签: c# wpf mvvm wpfdatagrid

我有一个带有参数集合的DataGrid,每个参数都有名称和值的属性。每个参数的值可以是多个单位之一(ft,btuh,kw,货币,字符串,不包括double的单位等)。如何格式化数据网格行以显示带有单位的值以及取决于单位的舍入因子?参见以下示例。

Example DataGrid

DataGrid可以引用具有不同参数集合的不同对象类,因此解决方案必须是动态的。也许在参数类中添加一个Units枚举,然后以某种方式从DataGrid中读取该枚举并相应地设置行的格式?

1 个答案:

答案 0 :(得分:0)

我要采取的一种方法是制造转换器。我已经使您成为一个主意,但是您可能应该对其进行修改以满足您的需求。

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的集合,其中每个集合都有一个TitleResultUnit。然后,将一列绑定到Title,将另一列绑定到Result,例如

Binding="{Binding Result, Converter={converters:CellUnitConverter Unit={Binding Unit}}}"

希望这指向解决方案。