首页 > 解决方案 > 如何将 WPF 控件文本绑定到布尔值,并对 xaml 中的文本做出决定

问题描述

我在 WPF 应用程序中有一个按钮控件,用于登录目的。该按钮具有双重用途:注销时应显示“登录”文本。登录时,应显示“注销”文本。

我可以通过数据绑定到视图模型中的适当字符串属性来做到这一点。但是,如果我可以简单地将数据绑定到“loggedIn”布尔值(注销时为假,登录时为真),然后从视图中决定在按钮上显示什么文本,那会更整洁。

这可能吗?

标签: c#wpfmvvm

解决方案


Style您可以使用in来实现它,Xaml而无需编写特定的 C# 代码。

假设您有IsLoggedIn属性ViewModel正在更改按钮绑定命令的执行方法:

private void MyButtonCommandExecuteMethod()
{
    this.IsLoggedIn = !this.IsLoggedIn;
}

private bool isLoggedIn;
public bool IsLoggedIn
{
    get
    {
        return this.isLoggedIn;
    }

    set
    {
        this.isLoggedIn = value;
        OnPropertyChanged(nameof(IsLoggedIn));
    }
}

在上面的代码中是事件的OnPropertyChanged方法实现。如果您使用任何框架或定义自己的名称,则将其替换为适当的名称。INotifyPropertyChangedPropertyChanged

您可以定义一种样式,例如:

<Button Command="{Binding YourButtonCommand}">
    <Button.Style>
        <Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
            <Setter Property="Content" Value="Log In" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsLoggedIn}" Value="True">
                    <Setter Property="Content" Value="Log out" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

在上面的代码IsLoggedIn中,绑定到根据它的值DataTrigger更新Button'属性。Content

还有一点,按钮样式继承自默认样式。如果您有任何键控样式,请在BasedOn属性中使用它。


推荐阅读