问题描述
我有一个过滤器列表。用户可以通过单击“添加”或“删除”来添加/删除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