Ein Anforderung könnte sein negative Werte in einer Tabelle rot darzustellen. Ich zeige wie man in einem Silverlight 2 Listview Control die Reihe (Zeile oder Row) den Hintergrund in der Farbe verändert. Gestuert wird das mit einer Checkbox in jeder Row.
Die Daten werden einfach generisch erzeugt und sind aber per Inotifypropertychanged Zwei Wege Bindungsfähig. Als Datenquelle dient eine Checkbox mit der die Daten zur Laufzeit geändert werden. Zur grafischen Anzeige wird ein Stackpanel verwendet dessen Hintergrund per Binding gebunden wird.
<ListBox x:Name="lstFields" SelectionChanged="lstFields_SelectionChanged" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" x:Name="stack1"
Background="{Binding checked,Converter={StaticResource srconverter}}">
<CheckBox x:Name="chkFields" IsChecked="{Binding checked, Mode=TwoWay}"></CheckBox>
<TextBlock Text="{Binding daten}"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Da die Checkbox nur true oder false enthalten kann und Farben von einem bestimmten Brush Typ sein müssen wird der Converter dazwischen geschalten.
Zunächst wird in der Page eine Referenz auf die Applikation erstellt und mit dem so erhaltenen Namesraum (hier c) eine statische Ressource erzeugt die auf die Klasse MyConverter zeigt. Der Key srconverter wird im obigen XAML referenziert.
... xmlns:c="clr-namespace:SilverlightApplication1test"
>
<UserControl.Resources>
<c:MyConverter x:Key="srconverter"></c:MyConverter>
</UserControl.Resources>
Nun fehlt nur noch der Converter der theoretisch umwandeln und rückumwandeln beherrscht. Aber da die Farbe nur eine einwege Datenbindung benötigt reicht folgender sehr einfacher Code.
Public Class MyConverter
Implements IValueConverter
Dim brush1 As SolidColorBrush = New SolidColorBrush(Color.FromArgb(255, 100, 200, 255))
Dim brush2 As SolidColorBrush = New SolidColorBrush(Color.FromArgb(255, 200, 100, 155))
Public Function Convert(ByVal value As Object, ByVal targetType As System.Type,
ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object
Implements System.Windows.Data.IValueConverter.Convert
Return IIf(value, brush1, brush2)
End Function
Public Function ConvertBack(ByVal value As Object, ByVal targetType As System.Type,
ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As
Object Implements System.Windows.Data.IValueConverter.ConvertBack
Throw New NotImplementedException()
End Function
End Class
Das Interface IValueConverter stellt sicher das beide Methoden implementiert sein müssen.