Se puede usar un MultiBinding con un convertidor. En primer lugar definir un IMultiValueConverter que formatea el primer valor utilizando el formato especificado en el segundo:
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();
}
}
Ahora se unen tanto su propiedad modelo de vista y el formato de la misma cosa:
<MultiBinding Converter="{StaticResource formatter}">
<Binding Path="Price" />
<Binding Path="PriceFormat" />
</MultiBinding>
La parte buena de esto es que la lógica de cómo debería formatearse Price puede vivir en ViewModel y ser comprobable. De lo contrario, podría mover esa lógica al convertidor y pasar cualquier otra propiedad que necesitara.
Eso es elegante, nunca se utilizó Multi enlaces antes, parece una solución mucho mejor para el formato complejo que el parámetro del convertidor. –
Y, por supuesto, nada impide que @Boris simplemente implemente una propiedad de "Precio Formateado" en su ViewModel y se vincule a eso. Eso sería aún más fácil si no tan flexible. –
gracias! ¡Funciona! Tener "FormattedPrice" sería más fácil pero menos elegante. Tengo al menos 10 precios diferentes en mi cuadrícula de datos. Mi única preocupación en esta etapa son las implicaciones de rendimiento de IMultiValueConverter. –