Вы можете использовать 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 и быть тестируемой. В противном случае вы можете перенести эту логику в конвертер и передать любые другие необходимые им свойства.
Это элегантное, никогда не используемое Множество привязок раньше, похоже, намного лучшее решение для сложного форматирования, чем параметр преобразователя. –
И, конечно, нет ничего, что остановило бы @Boris просто реализовать свойство «FormattedPrice» на его ViewModel и привязку к нему. Это было бы еще проще, если бы не было гибким. –
спасибо! Оно работает! «FormattedPrice» будет проще, но менее изящным. У меня есть как минимум 10 разных цен в моем datagrid. Моя единственная проблема на этом этапе - это последствия IMultiValueConverter. –