I have a form with two ComboBoxes. The second ComboBox holds a list of customers. The first ComboBox lets the user choose how they want to search for Customers and see them displayed. Currently, someone has it running different stored procedures for each search type just to change the way it's displayed in the drop down. I would like to change it so that it chooses a DataTemplate based on the selection of the first drop down.
E.G. If you choose First/Last from the first ComboBox, the customers will display in the second ComboBox drop down as:
John Doe
1234 Fake St. Chandler, Az
(480) 555-2342
If you change it to Last/First, the customers will then show in the drop down as:
Doe, John
1234 Fake St. Chandler, Az
(480) 555-2342
Or if you choose Email, it would display as:
JDoe@gmail.com
John Doe
1234 Fake St. Chandler, Az
I know how to write the templates, but how do I set the second ComboBox.ItemTemplate based on the selection of the first ComboBox? I'd be fine with using Triggers or C# code.
EDIT: Here is one attempt I just tried, but the template doesn't change. I know the trigger is working because the background turns green.
<UserControl.Resources>
<DataTemplate x:Key="ComboBoxCustomTemplate">
<Grid Margin="3 3">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.ColumnSpan="2" Text="{Binding Name}" />
<WrapPanel Grid.Row="1" Orientation="Horizontal">
<TextBlock Text="Address:" />
<TextBlock HorizontalAlignment="Left" Foreground="#003366" Margin="3,0,0,0" Text="{Binding Address}" />
</WrapPanel>
<WrapPanel Grid.Row="2" Orientation="Horizontal">
<TextBlock Text="Phone:" />
<TextBlock HorizontalAlignment="Left" Foreground="#003366" Margin="3,0,0,0" Text="{Binding Telephone}" />
</WrapPanel>
</Grid>
</DataTemplate>
<DataTemplate x:Key="ComboBoxEmailTemplate">
<Grid Margin="3 3">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.ColumnSpan="2" Text="{Binding Email}" />
<WrapPanel Grid.Row="1" Orientation="Horizontal">
<TextBlock Text="Address:" />
<TextBlock HorizontalAlignment="Left" Foreground="#003366" Margin="3,0,0,0" Text="{Binding Address}" />
</WrapPanel>
<WrapPanel Grid.Row="2" Orientation="Horizontal">
<TextBlock Text="Phone:" />
<TextBlock HorizontalAlignment="Left" Foreground="#003366" Margin="3,0,0,0" Text="{Binding Telephone}" />
</WrapPanel>
</Grid>
</DataTemplate>
</UserControl.Resources>
<ComboBox Name="cbSearchFilter" Padding="5,1" Width="150" Margin="3,3,10,3" SelectionChanged="cbSearchFilter_SelectionChanged" Style="{StaticResource VirtualizingComboBox}">
<ComboBoxItem Content="Parent Last/First" Tag="LastFirst" />
<ComboBoxItem Content="Parent First/Last" Tag="FirstLast" />
<ComboBoxItem Content="Student First/Last" Tag="Student" IsSelected="True" />
<ComboBoxItem Content="Parent Phone Number" Tag="PhoneNumber"/>
<ComboBoxItem Content="Parent Email" Tag="Email"/>
</ComboBox>
<ComboBox Name="cbCustomers"
SelectedValuePath="FamilyID"
ItemTemplate="{StaticResource ComboBoxCustomTemplate}"
Grid.Column="1" Grid.Row="2" IsEditable="True" StaysOpenOnEdit="True"
KeyboardNavigation.IsTabStop="False" SelectionChanged="rcbCustomers_SelectionChanged" KeyUp="rcbCustomers_KeyUp" KeyDown="rcbCustomers_KeyDown" >
<ComboBox.Style>
<Style TargetType="{x:Type ComboBox}" BasedOn="{StaticResource VirtualizingComboBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=cbSearchFilter, Path=SelectedItem.Tag}" Value="Email">
<DataTrigger.Setters>
<Setter Property="Background" Value="Green" />
<Setter Property="ItemTemplate" Value="{StaticResource ComboBoxEmailTemplate}" />
</DataTrigger.Setters>
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>