2010-05-19 3 views
6

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

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

ответ

6

Вы можете использовать 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 и быть тестируемой. В противном случае вы можете перенести эту логику в конвертер и передать любые другие необходимые им свойства.

+0

Это элегантное, никогда не используемое Множество привязок раньше, похоже, намного лучшее решение для сложного форматирования, чем параметр преобразователя. –

+0

И, конечно, нет ничего, что остановило бы @Boris просто реализовать свойство «FormattedPrice» на его ViewModel и привязку к нему. Это было бы еще проще, если бы не было гибким. –

+0

спасибо! Оно работает! «FormattedPrice» будет проще, но менее изящным. У меня есть как минимум 10 разных цен в моем datagrid. Моя единственная проблема на этом этапе - это последствия IMultiValueConverter. –

Смежные вопросы