TextBlock触发器而不是使用转换器

Jos*_*lin 5 wpf binding triggers datatrigger mvvm

我想在屏幕上显示一个数字.如果该数字为0,我根本不希望它显示.

<TextBlock Text="{Binding Path=Class.Count}" FontSize="20" FontWeight="Bold">
    <TextBlock.Triggers>
        <DataTrigger Binding="{Binding Path=Class.Count}" Value="0">
            <Setter Property="TextBlock.Text" Value=""/>
        </DataTrigger>
    </TextBlock.Triggers>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

在常规触发器无法解决我的问题后,我尝试了上面的代码.我不想写一个转换器来处理一个特定的数字.有没有办法创建一个触发器,如果​​它是0,将隐藏数字?

编辑:当我尝试使用常规触发器或数据触发器时,我得到一个xaml解析错误,告诉我需要使用事件触发器.

我试图将setter中的值设置为一个数字,以确保具有空值不会导致问题

Ern*_*rno 8

您正在使用绑定来设置Text属性.

我将控件折叠/隐藏,而不是将文本设置为String.Empty.

减少混乱.

编辑

<TextBox>
    <TextBox.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Name.Length}" Value="0">
                    <Setter Property="UIElement.Visibility" Value="Collapsed"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>
Run Code Online (Sandbox Code Playgroud)

要么

<TextBox>
    <TextBox.Style>
        <Style TargetType="TextBox">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Name.Length}" Value="0">
                    <Setter Property="Visibility" Value="Collapsed"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>
Run Code Online (Sandbox Code Playgroud)
  1. 只有一个Style允许DataTriggers.
  2. xaml解析器想要检查属性的存在,因此它需要ownertype.可见性在UIElement类上声明.正如我在两个示例中所示,有两种方法可以指定.