根据用户对下拉列表的选择显示控件

时间:2011-09-06 07:30:03

标签: wpf xaml mvvm

我需要根据用户在下拉列表中的选择来显示不同的控件。也就是说,如果用户选择日期,则应显示日期选择控件,或者输入文本输入框以进行文本输入...或者选择一组控件以进行更复杂的选择。

因此,我们的想法是创建多少用户控件,然后在所需的时间显示所需的用户控件。我想要一些比'可见真/假'属性更优雅的东西。

2 个答案:

答案 0 :(得分:1)

您可以使用内容控制和数据触发器来实现它。无需使用Visibility。

这是一个可以让您清楚了解的示例。 在下面的示例中,我使用组合框选择项作为datacontext进行了内容控制。 XAML代码:

 <StackPanel Orientation="Vertical" Width="150">
        <ComboBox Name="Controls"></ComboBox>
        <ContentControl DataContext="{Binding ElementName=Controls,Path=SelectedItem}">
            <ContentControl.Style>
                <Style TargetType="ContentControl">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding}" Value="Date">
                            <Setter Property="Content">
                                <Setter.Value>
                                    <DatePicker Height="30"></DatePicker>
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding}" Value="Text">
                            <Setter Property="Content">
                                <Setter.Value>
                                    <TextBox Height="30"></TextBox>
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding}" Value="Button">
                            <Setter Property="Content">
                                <Setter.Value>
                                    <Button Height="30"></Button>
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding}" Value="Checkbox">
                            <Setter Property="Content">
                                <Setter.Value>
                                    <CheckBox Height="30"></CheckBox>
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ContentControl.Style>
        </ContentControl>
    </StackPanel>

代码背后:

InitializeComponent();
            List<string> controlTypes = new List<string> { "Date", "Text", "Button", "Checkbox" };
            Controls.ItemsSource = controlTypes;

注意:对于创建示例我已经使用了代码...您可以轻松地将其转换为MVVM

答案 1 :(得分:0)

  

我想要比'可见真/假'属性更优雅的东西。

:-)无论如何你都会完成这个......

这太微不足道了......任何体面的WPF相关教程都会帮助你解决这个问题......

只是为了快速入门,您必须使用Binding ComboBox的SelectedItemVisibility所有要通过适当的值转换器隐藏/显示的控件。