I would let View handle how it displays the label. In my opinion, I would leave this color logic from ViewModel - since it should only process business rules, and not worry about how elements are displayed.
XAML:
<sdk:Label Content="{Binding NumericValue}" Foreground="{Binding NumericValue, Converter={StaticResource numToColor}}" />
View Model:
private decimal _numValue = -1; public decimal NumericValue { get { return _numValue; } set { _numValue = value; RaisePropertyChanged("NumericValue"); } }
Converter
public class NumberToColorConverter : IValueConverter { #region IValueConverter Members public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value == null || !(value is decimal)) return new SolidColorBrush(Colors.Black); var dValue = System.Convert.ToDecimal(value); if (dValue < 0) return new SolidColorBrush(Colors.Red); else return new SolidColorBrush(Colors.Green); } public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) { return null; } #endregion }
source share