使用 DataTrigger 写入 'Yes' 或 'No'

Using a DataTrigger to write 'Yes' or 'No'

我想将布尔值 (true/false) 分别转换为文本 'Yes' 或 'No'。我可以通过使用两个 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>

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

我已经尝试将文本设置为默认的 'No',然后只有 DataTrigger 用于 'Yes',但这似乎不起作用。

I have tried to set the text to 'No' as default, and then only have the DataTrigger for 'Yes', but this does not appear to work.

如果您在 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";