使用DataTrigger写“是”或“否”

时间:2018-04-16 14:00:36

标签: wpf datatrigger

我想将布尔值(true / false)分别转换为文本“是”或“否”。我可以使用两个DataTrigger来做到这一点,如下所示:

<TextBox>
    <TextBox.Style>
        <Style TargetType="TextBox">
            <Style.Triggers>

                <DataTrigger Binding="{Binding MyBool}" Value="True">
                    <Setter Property="Text" Value="Yes" />
                </DataTrigger>

                <DataTrigger Binding="{Binding MyBool}" Value="False">
                    <Setter Property="Text" Value="No" />
                </DataTrigger>

            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>

然而,似乎对这个问题有一个更简单(也更容易阅读)的解决方案。是否可以创建某种转换器,使用回退值或以其他方式简化我的代码?

我尝试将文本设置为“否”作为默认值,然后仅将DataTrigger设置为“是”,但这似乎不起作用。

1 个答案:

答案 0 :(得分:1)

  

我试图将文字设置为“不”。默认设置,然后只有DataTrigger表示“是”&#39;,但这似乎不起作用。

如果您在setter中指定默认值,则会执行此操作:

<TextBox>
    <TextBox.Style>
        <Style TargetType="TextBox">
            <Setter Property="Text" Value="No" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding MyBool}" Value="True">
                    <Setter Property="Text" Value="Yes" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>

如果你像这样在本地设置属性,它就不会工作:

<TextBox Text="No" ...>

那是因为本地值优先于样式设置的值。有关详细信息,请参阅MSDN:https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/dependency-property-value-precedence

另一种选择是定义一个值转换器:

WPF: Display a bool value as "Yes" / "No"

或者您可以绑定到只读字符串源属性,而不是直接绑定到MyBool

public string YesOrNo => MyBool ? "Yes" : "No";