【问题标题】:How to format DataGrid rows based on data's units如何根据数据的单位格式化 DataGrid 行
【发布时间】:2019-05-29 17:45:03
【问题描述】:

我有一个带有参数集合的 DataGrid,每个参数都有名称和值的属性。每个参数的值可以是多种单位之一(ft、btuh、kw、货币、字符串、单位减双倍等)如何格式化数据网格行以显示具有单位和单位相关舍入的值因素?请参阅下面的示例。

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

【问题讨论】:

  • 尝试使用IValueConverter,后面的代码可以随意格式化输出字符串。

标签: c# wpf mvvm wpfdatagrid


【解决方案1】:

我会采取的一种方法是制作转换器。我给你做了一个只是为了宣传这个想法,但你可能应该修改它以满足你的需要。

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}}}"

希望这指向解决方案。

【讨论】:

    猜你喜欢
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 2013-06-10
    • 1970-01-01
    • 2010-09-27
    • 2017-05-20
    相关资源
    最近更新 更多