2011-06-28 89 views
4

我的标签内容绑定到虚拟机,并根据计算结果为负值或正值。如果他们是积极的,我希望前景是一个特定的颜色和不同的颜色,如果他们是负面的。我应该通过绑定标签的前景来处理VM中的所有这些吗?只有4个标签顺便说一句。MVVM基于标签内容的值更改标签前景

感谢

回答

5

我先给查看处理它是如何显示的标签。在我看来,我会将这种颜色逻辑放在ViewModel之外 - 因为它只能处理业务规则等,而不用担心项目的显示方式。

XAML:

<sdk:Label Content="{Binding NumericValue}" Foreground="{Binding NumericValue, Converter={StaticResource numToColor}}" /> 

视图模型:

private decimal _numValue = -1; 
public decimal NumericValue 
{ 
    get { return _numValue; } 
    set 
    { 
    _numValue = value; 
    RaisePropertyChanged("NumericValue"); 
    } 
} 

转换器

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 
}