Vous pouvez utiliser un MultiBinding avec un convertisseur. Tout d'abord définir un IMultiValueConverter qui met en forme la première valeur en utilisant le format spécifié dans la seconde:
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();
}
}
maintenant lier à la fois votre propriété ViewModel et le format à la même chose:
<MultiBinding Converter="{StaticResource formatter}">
<Binding Path="Price" />
<Binding Path="PriceFormat" />
</MultiBinding>
La belle partie de cette est-ce que la logique de mise en forme de Price peut vivre dans ViewModel et être testable. Sinon, vous pouvez déplacer cette logique dans le convertisseur et transmettre toutes les autres propriétés dont il a besoin.
C'est élégant, jamais utilisé Multi liaisons avant, semble être une bien meilleure solution à la mise en forme complexe que le paramètre du convertisseur. –
Et bien sûr, rien n'empêche @Boris d'implémenter simplement une propriété "FormattedPrice" sur son ViewModel et de s'y lier. Ce serait encore plus facile s'il n'était pas aussi flexible. –
merci! Ça marche! Avoir "FormattedPrice" serait plus facile mais moins élégant. J'ai au moins 10 prix différents dans mon DataGrid. Ma seule préoccupation à ce stade est les implications de performance de IMultiValueConverter. –