MVVM根据标签内容的值更改标签前景

时间:2011-06-28 14:28:14

标签: mvvm

我的标签的内容绑定到VM,并且基于计算将是负面的或正面的。如果它们是正的,我希望前景是某种颜色,如果它们是负的则是不同的颜色。我应该通过绑定标签的前景来处理VM中的所有这些吗? btw只有4个标签。

由于

2 个答案:

答案 0 :(得分:5)

我会让View处理它如何显示标签。在我看来,我会将这种颜色逻辑保留在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
}

答案 1 :(得分:2)

我将假设这是Silverlight或WPF

您需要创建ValueConverter。为此,您需要创建一个新类 实现IValueConverter接口。 MSDN详细解释了如何执行此操作。

Silverlight
http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter%28v=VS.95%29.aspx

WPF
http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter%28v=VS.100%29.aspx