Mega Code Archive

 
Categories / VB.Net Tutorial / WPF
 

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