si potrebbe usare un MultiBinding con un convertitore. In primo luogo definire un IMultiValueConverter che formatta il primo valore utilizzando il formato di cui al secondo:
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();
}
}
Ora hanno aderito entrambe la vostra proprietà ViewModel e il formato per la stessa cosa:
<MultiBinding Converter="{StaticResource formatter}">
<Binding Path="Price" />
<Binding Path="PriceFormat" />
</MultiBinding>
La parte bella di questo è che la logica per come dovrebbe essere formattato Price può vivere nel ViewModel ed essere testabile. Altrimenti si potrebbe spostare quella logica nel convertitore e passare in qualsiasi altra proprietà di cui aveva bisogno.
fonte
2010-05-19 01:34:02
Questo è un binding elegante e mai utilizzato in precedenza, sembra una soluzione molto migliore per la formattazione complessa rispetto al parametro del convertitore. –
Ovviamente non c'è nulla che impedisca a @ Boris di implementare semplicemente una proprietà "FormattedPrice" sul suo ViewModel e di legarsi a questo. Sarebbe ancora più facile se non fosse flessibile. –
grazie! Funziona! Avere "FormattedPrice" sarebbe più facile ma meno elegante. Ho almeno 10 prezzi diversi nel mio datagrid. La mia unica preoccupazione in questa fase sono le implicazioni sulle prestazioni di IMultiValueConverter. –