6

我是 WPF 的新手,我试图创建 xaml 逻辑来显示/隐藏基于 ViewModel 上 AllowMiscTitle 的值的控件。The xaml consist of two fields a combobox of the standard tiles ("Mr", "Mrs", ..., "Other") when "Other" is selected I want the textbox to display.

我创建了以下 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>
4

3 回答 3

7

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 属性值优先级

于 2013-07-18T08:51:14.517 回答
6

有一个

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

您可以按以下方式使用它

<TextBox Visibility="{Binding YourPropertyName, Converter={StaticResource BoolToVis}}"></TextBox>
于 2013-07-18T08:55:00.547 回答
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>
于 2013-07-18T11:41:33.317 回答