настроенный StringFormat в WPF DataGrid - PullRequest
6 голосов
/ 19 мая 2010

Каким будет самый эффективный способ задать настраиваемое форматирование столбца в DataGrid? Я не могу использовать следующий StringFormat, поскольку мое сложное форматирование также зависит от некоторых других свойств этой ViewModel. (Например, форматирование цены имеет сложную логику форматирования, основанную на разных рынках.)

Binding ="{Binding Price, StringFormat='{}{0:#,##0.0##}'}"

1 Ответ

6 голосов
/ 19 мая 2010

Вы можете использовать MultiBinding с конвертером. Сначала определите IMultiValueConverter, который форматирует первое значение, используя формат, указанный во втором:

public class FormatConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        // some error checking for values.Length etc
        return String.Format(values[1].ToString(), values[0]);
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Теперь свяжите ваше свойство ViewModel и формат с одним и тем же:

<MultiBinding Converter="{StaticResource formatter}">
    <Binding Path="Price" />
    <Binding Path="PriceFormat" />
</MultiBinding>

Приятно то, что логика форматирования Price может существовать во ViewModel и быть тестируемой. В противном случае вы можете переместить эту логику в преобразователь и передать любые другие необходимые свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...