2012-04-01 26 views
0

Zunächst einmal bin ich neu in WPF und Xaml, also hoffe ich, dass Sie verstehen, was ich verlange.Textfarbe ist abhängig vom Wert

Ich habe diese Situation: Es gibt eine Liste von Tieren. Jedes Tier hat Gewicht Eigenschaft. Was ich versuche zu erreichen ist, wenn das Gewicht des Tieres größer als 300 kg ist, sollte das Gewicht rot angezeigt werden.

Antwort

2

Sie benutzerdefinierten Konverter verwenden könnte das zu erreichen. Wenn Ihr Artikel so aussieht:

public class Animal 
{ 
    public int Weight { get; set; } 
    public string Name { get; set; } 
} 

und ItemTemplate wie folgt aus:

<DataTemplate x:Key="AnimalTemplate"> 
    <TextBlock Text="{Binding Name}" Foreground="{Binding Weight, Converter={StaticResource AnimalColorSelector}}"/> 
</DataTemplate> 

Ihr Konverter wie die folgenden sein:

public class AnimalColorSelector : IValueConverter 
{ 
    private readonly Color _overweightColor = Colors.Red; 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value is int) 
     { 
      return (int) value > 300 ? new SolidColorBrush(_overweightColor) : Binding.DoNothing; 
     } 

     return Binding.DoNothing; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 

Dieser Ansatz folgende Profis hat:

  1. Sie müssen die defa nicht fest codieren ult Farbe, aber erben Sie es mit Binding.DoNothing.
  2. Sie müssen keine Stilinformationen in einem Ansichtsmodell speichern.
+0

Vielen Dank. Es klappt! – BojanSM

0

Sie könnten ein ViewModel für Animals erstellen, das die notwendige Logik für die Farbeinstellung enthalten würde. Wie folgt aus:

public class VMAnimal : INotifyPropertyChanged 
{ 
    private int _weight; 
    public int Weight 
    { 
     get { return _weight; } 
     set 
     { 
      _weight = value; 
      RaisePropertyChanged("Weight"); 
      RaisePropertyChanged("Color"); 
     } 
    } 

    public Brush Foreground 
    { 
     get 
     { 
      if (Weight > 300) 
       return new SolidColorBrush(Color.Red); 
      return new SolidColorBrush(Color.Black); 
     } 
    } 
} 

Und es verwendet, mit wie diese Bindung:

<TextBlock Text="{Binding Weight}" Foreground="{Binding Foreground}" /> 
+0

oder verwenden Sie einen Konverter – Phil

Verwandte Themen