У меня есть форма с двумя ComboBox. Второй ComboBox содержит список клиентов. Первый ComboBox позволяет пользователю выбирать, как он хочет искать клиентов и видеть их на экране. В настоящее время кто-то использует разные хранимые процедуры для каждого типа поиска, просто чтобы изменить способ отображения в раскрывающемся списке. Я хотел бы изменить его так, чтобы он выбирал шаблон данных на основе выбора первого раскрывающегося списка.
например. Если вы выберете Первый / Последний из первого ComboBox, клиенты будут отображаться во втором раскрывающемся списке ComboBox как:
Джон Доу
1234 Поддельный Св. Чандлер, Аз
(480) 555-2342
Если вы измените его на Last / First, клиенты будут отображаться в раскрывающемся списке как:
Доу, Джон
1234 Поддельный Св. Чандлер, Аз
(480) 555-2342
Или, если вы выберете Email, он будет отображаться как:
JDoe@gmail.com
Джон Доу
1234 Поддельный Св. Чандлер, Аз
Я знаю, как писать шаблоны, но как мне установить второй ComboBox.ItemTemplate на основе выбора первого ComboBox? Я хотел бы использовать триггеры или код C #.
РЕДАКТИРОВАТЬ: Вот одна попытка, которую я только что попробовал, но шаблон не меняется. Я знаю, что триггер работает, потому что фон становится зеленым.
<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>