WPF显示/隐藏带触发器的控件

时间:2013-07-18 08:42:26

标签: wpf mvvm triggers

我是WPF的新手,我尝试创建xaml逻辑,以根据ViewModel上的AllowMiscTitle的值显示/隐藏控件。 xaml由两个字段组成,标准图块的组合框(“Mr”,“Mrs”,...,“Other”)当选择“Other”时我希望文本框显示。

我创建了以下xaml:

                <DockPanel Validation.Error="Validation_Error" HorizontalAlignment="Stretch">
                <ComboBox ItemsSource="{Binding Path=Titles, Mode=OneTime}" 
                      Text="{Binding Path=Title}"/>
                <TextBox x:Name="TxtBxTitle" Margin="5,5" Visibility="Visible">
                    <TextBox.Style>
                        <Style>
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding Path=AllowMiscTitle}" Value="false">
                                    <Setter Property="TextBox.Visibility" Value="Hidden"/>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </TextBox.Style>
                </TextBox>

            </DockPanel>

3 个答案:

答案 0 :(得分:5)

由于您在Trigger

中明确设置了Visibility属性,因此TextBox无效

这样做:

<TextBox x:Name="TxtBxTitle" Margin="5,5">
    <TextBox.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=AllowMiscTitle}" Value="false">
                      <Setter Property="TextBox.Visibility" Value="Hidden"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>

原因是Dependency property value precedence

答案 1 :(得分:4)

有一个

<BooleanToVisibilityConverter x:Key="BoolToVis"></BooleanToVisibilityConverter>

您可以将其用作以下内容

<TextBox Visibility="{Binding YourPropertyName, Converter={StaticResource BoolToVis}}"></TextBox>

答案 2 :(得分:0)

如果我的问题是对的: -

如果您选择的值绑定到ViewModel中的某个属性,如: -

private string _GenderType;

        public string GenderType
        {
            get
            {
                return _GenderType;
            }
            set
            {
                _GenderType= value;
 RaisePropertyChanged("GenderType");

在xaml中: -

<TextBox.Style>
        <Style>
<Setter Property="TextBox.Visibility" value="Hidden"/>
<Style TargetType="{x:Type TextBox}">   
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=GenderType,ElementName=Combo1}" Value="Other">
                      <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>