2011-06-28 22 views
4

私のラベルの内容はVMにバインドされ、計算に基づいて負または正のいずれかになります。それらがポジティブであれば、フォアグラウンドはマイナスの場合は特定の色と異なる色にします。私はちょうどラベルのフォアグラウンドをバインドすることでVM内のすべてを処理する必要がありますか? 4つのラベルだけがbtwです。私は、これはあなたがValueConverterを作成する必要があるのSilverlightやWPFMVVMラベルの内容に基づいてラベルのフォアグラウンドを変更します

であると仮定するつもりです

おかげ

答えて

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 
} 
関連する問題