您为什么将这个问题与 MVVM 联系起来?是不是因为您的组合框与您要填充的窗口不在同一个视图上(仍然不够好)。
让我们首先回答组合框在同一个视图中的情况(这里不需要视图模型)。
你只需要使用数据触发器+元素名称
<ComboBox x:Name="authSelector" >
<ComboBoxItem >Basic</ComboBoxItem>
<ComboBoxItem>OAUTH</ComboBoxItem>
<ComboBoxItem>NoAuth</ComboBoxItem>
</ComboBox>
<ContentControl Content="{Binding}">
<ContentControl.Style>
<Style TargetType="ContentControl">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=authSelector,Path=SelectionBoxItem}" Value="Basic">
<Setter Property="ContentTemplate" Value="{StaticResource basicTemplate}" />
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=authSelector,Path=SelectionBoxItem}" Value="OAUTH">
<Setter Property="ContentTemplate" Value="{StaticResource OAUTHTemplate}" />
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=authSelector,Path=SelectionBoxItem}" Value="NoAuth">
<Setter Property="ContentTemplate" Value="{StaticResource noAuthTemplate}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
这里是这里使用的数据模板
<DataTemplate x:Key="basicTemplate" >
<StackPanel>
<TextBlock Text="basicTemplate"/>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="OAUTHTemplate" >
<StackPanel>
<TextBlock Text="OAUTH Template"/>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="noAuthTemplate" >
<StackPanel>
<TextBlock Text="noAuth Template"/>
</StackPanel>
</DataTemplate>
如果您的组合框不在同一个视图上,并且您想使用视图模型来获取所选项目,则在视图模型中创建名为 SelectedAuthType 的属性并在数据触发器中使用该属性
而不是数据触发器中的这个
ElementName=authSelector,Path=SelectionBoxItem
喜欢这个
<DataTrigger Binding="{Binding SelectedAuthType }" Value="Basic">