Как отформатировать строки DataGrid на основе единиц данных - PullRequest
0 голосов
/ 29 мая 2019

У меня есть DataGrid с набором параметров, каждый из которых имеет свойства для имени и значения. Значение каждого параметра может быть одним из множества единиц (футы, бтч, квт, валюта, строка, единица меньше двойного и т. Д.) Как отформатировать строки сетки данных, чтобы отобразить значение с единицами и округлением, зависящим от единицы фактор? Смотрите ниже пример.

Example DataGrid

DataGrid может ссылаться на разные классы объектов с разными наборами параметров, поэтому решение должно быть динамичным. Может быть, добавить перечисление Units в класс параметров, а затем каким-то образом прочитать это из DataGrid и соответствующим образом отформатировать строку?

1 Ответ

0 голосов
/ 31 мая 2019

Один из подходов, который я бы выбрал, - это сделать конвертер. Я сделал вам одну, чтобы передать идею, но вам, вероятно, следует изменить ее в соответствии с вашими потребностями.

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

Надеюсь, это указывает на решение.

...