c# - 如何将 WPF 控件文本绑定到布尔值,并对 xaml 中的文本做出决定
问题描述
我在 WPF 应用程序中有一个按钮控件,用于登录目的。该按钮具有双重用途:注销时应显示“登录”文本。登录时,应显示“注销”文本。
我可以通过数据绑定到视图模型中的适当字符串属性来做到这一点。但是,如果我可以简单地将数据绑定到“loggedIn”布尔值(注销时为假,登录时为真),然后从视图中决定在按钮上显示什么文本,那会更整洁。
这可能吗?
解决方案
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
方法实现。如果您使用任何框架或定义自己的名称,则将其替换为适当的名称。INotifyPropertyChanged
PropertyChanged
您可以定义一种样式,例如:
<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
属性中使用它。
推荐阅读
- timer - 如何在 CANoe Capl 中计算“事件”?
- javascript - JS:创建用户输入的行数
- server - Symfony 5 解析错误:语法错误,意外的“?” 在第 15 行的 C:\Users\public\index.php
- php - PHP GD中的多度颜色
- google-chrome - mac os 中的 Chrome 版本 80 fps 的 webgl 降级
- google-api - Google Drive API,增加配额限制的成本,“每个用户每 100 秒的查询数”和“每 100 秒的查询数”
- flutter - 测试提供者时上下文不匹配
- sql-server - Ansible 安装 SQL Server Express 2016
- sql - 基于主查询中的列的子查询
- compression - 卡卡杜,体积图像上的多分量变换