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