我有一个包含四个ComboBox
值int
的1, 2, 3, 4
。在此之下,我有一个GroupBox
。我想做的就是根据ComboBox的值在GroupBox
中显示唯一的内容。即对于TextBlock
可能是TextBox
或1
,对于Button
可能是2
。
当前,我有四个单独的GroupBoxes
彼此叠放,并且将那些Visibility
的GroupBoxes
属性绑定(bind)到bool
中的唯一ViewModel
属性,该属性在SelectedItem
的ComboBox
更改时设置。但是我感觉有一种方法可以压缩它,只保留一个GroupBox
并用正确的内容填充它,而不用拥有四个单独的IsVisible
属性和四个单独的ojit_code属性。
<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 };
}
}
最佳答案
您可以将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>
当然,可以绑定(bind)到 View 模型的source属性,而不是绑定(bind)到
SelectedItem
的ComboBox
属性:<DataTrigger Binding="{Binding SelectedType}" Value="1">
确保 View 模型实现了
INotifyPropertyChanged
接口(interface)并引发更改通知。关于c# - 根据组合框选择更改GroupBox的内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53726027/