Каков был бы самый эффективный способ установить настроенное форматирование столбца в DataGrid? Я не могу использовать следующий StringFormat, поскольку мое сложное форматирование также зависит от некоторого другого свойства этого ViewModel. (например, у Price, форматирующего, есть некоторые сложная логика форматирования на основе различных рынков.)
Binding ="{Binding Price, StringFormat='{}{0:#,##0.0##}'}"
Вы можете использовать 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 и быть тестируемым. В противном случае вы можете переместить эту логику в преобразователь и передать любые другие необходимые свойства.