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

MVVM根据标签内容的值更改标签前景,mvvm,Mvvm,我的标签的内容绑定到VM,并且基于计算将是负的或正的。如果他们是积极的,我希望前景是一个特定的颜色和不同的颜色,如果他们是消极的。我应该通过绑定标签的前台在VM中处理所有这些吗?顺便说一句,只有4个标签 谢谢我假设这是Silverlight或WPF 您需要创建一个ValueConverter。为此,您需要创建一个新类 实现IValueConverter接口。MSDN对此有详细说明 Silverlight WPF 我会让视图处理如何显示标签。在我看来,我会将这种颜色逻辑排除在ViewModel之

我的标签的内容绑定到VM,并且基于计算将是负的或正的。如果他们是积极的,我希望前景是一个特定的颜色和不同的颜色,如果他们是消极的。我应该通过绑定标签的前台在VM中处理所有这些吗?顺便说一句,只有4个标签


谢谢

我假设这是Silverlight或WPF

您需要创建一个ValueConverter。为此,您需要创建一个新类 实现
IValueConverter
接口。MSDN对此有详细说明

Silverlight

WPF

我会让视图处理如何显示标签。在我看来,我会将这种颜色逻辑排除在ViewModel之外,因为它应该只处理业务规则等,而不必担心项目的显示方式

XAML:

转换器

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
}
public class NumberToColorConverter:IValueConverter
{
#区域转换器成员
公共对象转换(对象值、System.Type targetType、对象参数、System.Globalization.CultureInfo区域性)
{
如果(值==null | |!(值为十进制))
返回新的SolidColorBrush(颜色为黑色);
var dValue=System.Convert.ToDecimal(值);
如果(D值<0)
返回新的SolidColorBrush(颜色为红色);
其他的
返回新的SolidColorBrush(颜色为绿色);
}
公共对象转换回(对象值、System.Type targetType、对象参数、System.Globalization.CultureInfo区域性)
{
返回null;
}
#端区
}
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
}