<Window x:Class="DataBinding.VariedTemplates"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="VariedTemplates" Height="420" Width="675" 
    xmlns:local="clr-namespace:DataBinding"
    >
  <Window.Resources>
    <DataTemplate x:Key="DefaultTemplate">
      <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Path=CategoryName}" Value="Tools">
          <Setter Property="ListBoxItem.Foreground" Value="Red"></Setter>
        </DataTrigger>                
      </DataTemplate.Triggers>

      <Grid Margin="0" Background="{Binding RelativeSource=
                          {
                             RelativeSource 
                             Mode=FindAncestor, 
                             AncestorType={x:Type ListBoxItem}
                          }, 
                          Path=Background
                         }">
        <Border Margin="5" BorderThickness="1" BorderBrush="SteelBlue"
          CornerRadius="4" Background="White">
          <Grid Margin="3">
            <Grid.RowDefinitions>
              <RowDefinition></RowDefinition>
              <RowDefinition></RowDefinition>
            </Grid.RowDefinitions>
            <TextBlock
             Text="{Binding Path=ModelNumber}"></TextBlock>
            <TextBlock Grid.Row="1"
             Text="{Binding Path=ModelName}"></TextBlock>
          </Grid>
        </Border>
      </Grid>
    </DataTemplate>
    
    <DataTemplate x:Key="HighlightTemplate">
      <Grid Margin="0" Background="{Binding RelativeSource=
                          {
                             RelativeSource 
                             Mode=FindAncestor, 
                             AncestorType={x:Type ListBoxItem}
                          }, 
                          Path=Background
                         }">
        <Border Margin="5" BorderThickness="1" BorderBrush="SteelBlue" Background="LightYellow"
          CornerRadius="4">
          <Grid Margin="3">
            <Grid.RowDefinitions>
              <RowDefinition></RowDefinition>
              <RowDefinition></RowDefinition>
              <RowDefinition></RowDefinition>
            </Grid.RowDefinitions>
            <TextBlock FontWeight="Bold"
             Text="{Binding Path=ModelNumber}"></TextBlock>
            <TextBlock Grid.Row="1" FontWeight="Bold"
             Text="{Binding Path=ModelName}"></TextBlock>
            <TextBlock Grid.Row="2" FontStyle="Italic" HorizontalAlignment="Right">*** Great for vacations ***</TextBlock>
          </Grid>
        </Border>
      </Grid>
    </DataTemplate>

    </Window.Resources>
  
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="3*"></ColumnDefinition>
      <ColumnDefinition Width="5*"></ColumnDefinition>
    </Grid.ColumnDefinitions>

    <Grid>
      <Grid.RowDefinitions>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="*"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
      </Grid.RowDefinitions>

      <Button Margin="7,7,7,0" Padding="2" Click="cmdGetProducts_Click">Get Products</Button>      
      
      <ListBox Grid.Row="1" Margin="7,3,7,10" Name="lstProducts" HorizontalContentAlignment="Stretch"
              SnapsToDevicePixels="True"  >
        <ListBox.ItemTemplateSelector>
          <local:SingleCriteriaHighlightTemplateSelector
            DefaultTemplate="{StaticResource DefaultTemplate}"
            HighlightTemplate="{StaticResource HighlightTemplate}"
            PropertyToEvaluate="CategoryName"
            PropertyValueToHighlight="Travel"
            >            
          </local:SingleCriteriaHighlightTemplateSelector>
        </ListBox.ItemTemplateSelector>
        <ListBox.ItemContainerStyle>
          <Style>
            <Setter Property="Control.Padding" Value="0"></Setter>
            <Style.Triggers>
              <Trigger Property="ListBoxItem.IsSelected" Value="True">
                <Setter Property="ListBoxItem.Background" Value="DarkRed" />
                <Setter Property="ListBoxItem.Foreground" Value="DarkBlue" />
              </Trigger>
            </Style.Triggers>
          </Style>
        </ListBox.ItemContainerStyle>
      </ListBox>

      <Button Margin="7,0,7,7" Grid.Row="3" Padding="2" Click="cmdApplyChange_Click">Change One Item</Button>
    </Grid>

    <GridSplitter Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Stretch"
                   Width="5"></GridSplitter>

    <Border Grid.Column="1" Padding="7" Margin="7" Background="LightSteelBlue">
      <Grid DataContext="{Binding ElementName=lstProducts, Path=SelectedItem}" >
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="Auto"></ColumnDefinition>
          <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
          <RowDefinition Height="Auto"></RowDefinition>
          <RowDefinition Height="Auto"></RowDefinition>
          <RowDefinition Height="Auto"></RowDefinition>
          <RowDefinition Height="Auto"></RowDefinition>
          <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        
        <TextBlock Margin="7">Model Number:</TextBlock>
        <TextBox Margin="5" Grid.Column="1" Text="{Binding Path=ModelNumber}"></TextBox>
        <TextBlock Margin="7" Grid.Row="1">Model Name:</TextBlock>
        <TextBox Margin="5" Grid.Row="1" Grid.Column="1" Text="{Binding Path=ModelName}"></TextBox>
        <TextBlock Margin="7" Grid.Row="2">Unit Cost:</TextBlock>
        <TextBox Margin="5" Grid.Row="2" Grid.Column="1" Text="{Binding Path=UnitCost}"></TextBox>
        <TextBlock Margin="7,7,7,0" Grid.Row="3">Description:</TextBlock>
        <TextBox Margin="7" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" 
                 TextWrapping="Wrap" VerticalScrollBarVisibility="Visible" Text="{Binding Path=Description}"></TextBox>

      </Grid>
    </Border>

  </Grid>
</Window>
