我有一个ComboBox
,其中包含四个int
值,1, 2, 3, 4
。在此之下,我有一个GroupBox
。我想做的是根据ComboBox的值在GroupBox
中显示唯一的内容;即TextBlock
可能是TextBox
或1
,而Button
可能是2
。
目前,我有四个彼此独立的GroupBoxes
,并且将Visibility
的{{1}}属性绑定到{{ 1}},只要GroupBoxes
的{{1}}发生变化,我都会设置。但是我感觉有一种方法可以压缩它,只保留一个bool
并用正确的内容填充它,而不用拥有四个单独的属性和四个单独的ViewModel
属性。
SelectedItem
答案 0 :(得分:2)
您可以将Style
与触发器配合使用,例如:
<ComboBox x:Name="cmb" xmlns:s="clr-namespace:System;assembly=mscorlib">
<s:Int32>1</s:Int32>
<s:Int32>2</s:Int32>
<s:Int32>3</s:Int32>
<s:Int32>4</s:Int32>
</ComboBox>
<GroupBox Header="...">
<GroupBox.Style>
<Style TargetType="GroupBox">
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedItem, ElementName=cmb}" Value="1">
<Setter Property="Content">
<Setter.Value>
<TextBlock Text="1..." />
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding SelectedItem, ElementName=cmb}" Value="2">
<Setter Property="Content">
<Setter.Value>
<Button Content="2..." />
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</GroupBox.Style>
</GroupBox>
您当然可以绑定到视图模型的source属性,而不是绑定到SelectedItem
的{{1}}属性:
ComboBox
确保视图模型实现<DataTrigger Binding="{Binding SelectedType}" Value="1">
接口并引发更改通知。