如何根据ComboBox的选择显示不同的用户控件? Filter.cs MainWindow.xaml

问题描述

我有一个过滤器列表。用户可以通过单击“添加”或“删除”来添加/删除1.(我已经实现了此功能)来决定使用多少个过滤器。

每个过滤器最初都是一个comboBox,其中包含名称和性别等过滤器选项。选择“名称”时,它将在组合框附近显示一个文本框;选择“性别”时,它将显示2个单选按钮“男性/女性”。

<ComboBox Name="FilterComboBox" ItemsSource="{Binding FilterOptions}"...>
<Button Command="{Binding RemoveFilterCommand}....">

这意味着Name对应于文本框,Sex对应于单选按钮组,依此类推。

不是在后端代码上设置文本框,单选按钮组等的可见性。有没有办法使用.xaml中的数据模板/项目选择器来实现它?谢谢。

解决方法

您可以使用DataTrigger来做到这一点。

我创建了一个简单的类Filter,该类保存可能的过滤器类型(名称,性别)的集合,并具有属性SelectedType,指示已选择哪种类型。

Filter.cs

public class Filter : INotifyPropertyChanged
{
    public List<string> Types { get; set; }

    private string _selectedType;
    public string SelectedType
    {
        get => _selectedType;
        set
        {
            _selectedType = value;
            OnPropertyChanged();
        }
    }

    public Filter()
    {
        Types = new List<string>
        {
            "Name","Sex"
        };
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(propertyName));
    }
}

MainWindow.xaml中发生了所有其他事情

  • 我正在Grid的{​​{1}}中使用一个数组来保存过滤器的集合,该集合将在您的视图模型中的某个地方,但这只是一个示例。
  • 我正在使用Resources来保存过滤器,并且在ItemsControl的{​​{1}}属性中定义了单个过滤器的模板。

MainWindow.xaml

ItemsControl