我的标签内容绑定(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/