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

标签 mvvm

我的标签内容绑定(bind)到虚拟机,根据计算结果将是负数或正数。如果它们是正面的,我希望前景是某种颜色,如果它们是负面的,我希望前景是不同的颜色。我应该通过绑定(bind)标签的前景来处理虚拟机中的所有这些吗?顺便说一句,只有 4 个标签。

谢谢

最佳答案

我会让 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
}

关于MVVM 根据标签内容的值更改标签前景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6508078/

相关文章:

android - 在android中实现MVVM时对网络层的错误处理感到困惑,如何通知用户有问题?

wpf - Caliburn.Micro:ControlTemplate 中按钮的 Action

c# - 如何在不丢失 WPF 中的绑定(bind)的情况下更改 TextBox.Text?

javascript - 如何使用默认值创建 JavaScript 对象字段? (AngularJS模型相关)

c# - Caliburn.Micro GetAllInstances 只返回一个 viewModel(Caliburn.Micro MVVM)

windows-phone-7 - WP7 PanoramaItem 绑定(bind)第二个 PanoramaItem

c# - 如何将组合框选择更改值与列表框项绑定(bind)?

javascript - 使用异步获取的数据填充 KnockoutJS 支持的表单的惯用方法是什么?

c# - 绑定(bind)多功能 WPF DataGrid

objective-c - 带有 UITableView 的 ReactiveCocoa MVVM