我有一个带有两个组合框的表单。第二个 ComboBox 包含一个客户列表。第一个 ComboBox 允许用户选择他们希望如何搜索客户并查看他们的显示方式。目前,有人让它为每种搜索类型运行不同的存储过程,只是为了改变它在下拉列表中的显示方式。我想更改它,以便它根据第一个下拉菜单的选择来选择 DataTemplate。
EG 如果您从第一个 ComboBox 中选择 First/Last,则客户将在第二个 ComboBox 下拉菜单中显示为:
John Doe
1234 Fake St. Chandler, Az
(480) 555-2342
如果您将其更改为 Last/First,则客户将在下拉列表中显示为:
Doe, John
1234 Fake St. Chandler, Az
(480) 555-2342
或者,如果您选择电子邮件,它将显示为:
JDoe@gmail.com
John Doe
1234 Fake St. Chandler, Az
我知道如何编写模板,但是如何根据第一个 ComboBox 的选择设置第二个 ComboBox.ItemTemplate?我可以使用触发器或 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>