我有一个ComboBox,包含四个int值,1, 2, 3, 4。在那下面,我有一个GroupBox。我要做的是根据GroupBox的值在ComboBox中显示唯一的内容;例如,TextBlock或TextBox表示1,Button表示2。
目前,我有四个单独的GroupBoxes,它们都放在一起,并将这些GroupBoxes的Visibility属性绑定到ViewModel中的唯一bool属性,每当ComboBox的SelectedItem发生变化时,就会设置这些属性。但是我觉得有一种方法可以压缩它,只保留一个GroupBox并用正确的内容填充它,而不是有四个单独的IsVisible属性。
<ComboBox ItemsSource="{Binding PackageTypes}" SelectedItem="{Binding SelectedType}" />
<GroupBox /><!--Change content of this based on combobox's selection-->
public class MainViewModel : ViewModelBase
{
private PackageModel_selectedPackageModel;
public PackageModel SelectedPackageModel
{
get => _selectedPackageModel;
set
{
_selectedPackageModel = value;
}
}
public ObservableCollection<int> PackageTypes { get; set; }
public int SelectedType { get; set; }
public MainViewModel()
{
PackageTypes = new ObservableCollection<int>() { 1, 2, 3, 4 };
}
}发布于 2018-12-11 14:20:13
您可以在触发器中使用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>当然,您可以绑定到视图模型的源属性,而不是绑定到视图的SelectedItem属性:
<DataTrigger Binding="{Binding SelectedType}" Value="1">确保视图模型实现INotifyPropertyChanged接口并引发更改通知。
https://stackoverflow.com/questions/53726027
复制相似问题