Use Data Triggers to Change the Appearance of Bound Data
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:WpfApplication1="clr-namespace:WpfApplication1"
x:Name="thisWindow" Title="WPF" Height="240" Width="280">
<Window.Resources>
<WpfApplication1:DataItems x:Key="dataItems"/>
<WpfApplication1:AmountToHeightConverter x:Key="amountToHeightConverter" />
<DataTemplate x:Key="dataItemtemplate">
<Rectangle x:Name="rectangle" Width="30"
VerticalAlignment="Bottom"
Fill="Green"
Height="{Binding Path=Amount,Converter={StaticResource amountToHeightConverter}}"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=IsPositive}" Value="False">
<Setter TargetName="rectangle" Property="Fill" Value="Red"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</Window.Resources>
<StackPanel>
<ItemsControl ItemsSource="{Binding Source={StaticResource dataItems}}"
ItemTemplate="{StaticResource dataItemtemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
<Line Stroke="Black" StrokeThickness="2" X1="0" Y1="0" X2="0" Y2="{Binding ElementName=thisWindow, Path=ActualHeight}"/>
<Line Stroke="Black" StrokeThickness="2" X1="0" Y1="0" X2="{Binding ElementName=thisWindow, Path=ActualWidth}" Y2="0"/>
</StackPanel>
</Window>
//File:Window.xaml.vb
Imports System
Imports System.Windows.Data
Imports System.Globalization
Imports System.Collections.ObjectModel
Namespace WpfApplication1
<ValueConversion(GetType(Double), GetType(Double))> _
Public Class AmountToHeightConverter
Implements IValueConverter
Public Function Convert(value As [Object], targetType As Type, parameter As [Object], culture As CultureInfo) As [Object] Implements IValueConverter.Convert
Dim amount As Double = System.Convert.ToDouble(value)
If amount < 0 Then
amount = 0
End If
Return amount
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.ConvertBack
Throw New NotImplementedException()
End Function
End Class
Public Class DataItem
Public Property Amount() As Double
Get
Return m_Amount
End Get
Set
m_Amount = Value
End Set
End Property
Private m_Amount As Double
Public ReadOnly Property IsPositive() As Boolean
Get
Return Amount >= 0
End Get
End Property
End Class
Public Class DataItems
Inherits Collection(Of DataItem)
Public Sub New()
Me.Add(New DataItem() With { _
.Amount = 5 _
})
Me.Add(New DataItem() With { _
.Amount = 8 _
})
Me.Add(New DataItem() With { _
.Amount = -5 _
})
Me.Add(New DataItem() With { _
.Amount = 2 _
})
Me.Add(New DataItem() With { _
.Amount = -5 _
})
Me.Add(New DataItem() With { _
.Amount = -5 _
})
End Sub
End Class
End Namespace
Related examples in the same category