当 1 个或多个 TextBox 字段为空时禁用按钮
Posted
技术标签:
【中文标题】当 1 个或多个 TextBox 字段为空时禁用按钮【英文标题】:Disable button when 1 or more TextBox fields are empty 【发布时间】:2021-05-03 16:38:18 【问题描述】:我尝试了一些解决方案,但它们似乎适用于 WPF。
这是我目前拥有的,但它似乎不起作用:
<Grid>
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Username :"/>
<TextBox x:Name="userNameTextBox" Text="Binding Username, Mode=TwoWay" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Password :" />
<TextBox x:Name="passwordTextBox" Text="Binding Password, Mode=TwoWay" />
</StackPanel>
<Button IsEnabled="Binding ElementName=userNameTextBox, Path=Text.Length" Command="Binding LoginCommand " Content="Login" />
</StackPanel>
</Grid>
所以如果 userNameTextBox 和 passwordTextBox 不为空,我想让按钮启用。
它始终保持启用状态。我究竟做错了什么?是否可以仅通过 XAML 执行此操作?
private string _username;
public string Username
get return _username;
set
_username = value;
RaisePropertyChanged(nameof(Username));
RaisePropertyChanged(nameof(IsButtonEnable));
private string _password;
public string Password
get return _password;
set
_password = value;
RaisePropertyChanged(nameof(Password));
RaisePropertyChanged(nameof(IsButtonEnable));
private bool _isButtonEnable;
public bool IsButtonEnable
get
if (!string.IsNullOrEmpty(_username) && !string.IsNullOrWhiteSpace(_username)
&& !string.IsNullOrEmpty(_password) && !string.IsNullOrWhiteSpace(_password))
return true;
else
return false;
【问题讨论】:
【参考方案1】:我认为您可以设置一个布尔值来禁用该按钮。这是下面给出的示例代码=> XAML:
<Grid>
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Username :"/>
<TextBox x:Name="userNameTextBox" Text="Binding Username, Mode=TwoWay" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Password :" />
<TextBox x:Name="passwordTextBox" Text="Binding Password, Mode=TwoWay" />
</StackPanel>
<Button IsEnabled="Binding IsButtonEnable" Command="Binding LoginCommand " Content="Login" />
</StackPanel>
</Grid>
在ViewModel中添加IsButtonEnable属性like
#region Property IsButtonEnable: bool
public bool IsButtonEnable
get
if( !string.IsNullOrEmpty(_Username) && !string.IsNullOrWhiteSpace(_Username)
&& !string.IsNullOrEmpty(_Password) && !string.IsNullOrWhiteSpace(_Password))
return true;
else
return false;
#endregion
#region Property Username: string
private string _Username;
public string Username
get return _Username;
set
_Username = value;
NotifyPropertyChanged(nameof(Username));
NotifyPropertyChanged(nameof(IsButtonEnable));
#endregion
#region Property Password: string
private string _Password;
public string Password
get return _Password;
set
_Password = value;
NotifyPropertyChanged(nameof(Password));
NotifyPropertyChanged(nameof(IsButtonEnable));
#endregion
注意:这里NotifyPropertyChanged
将在Username
或Password
更改时调用IsButtonEnable
来更新UI。您想添加更多属性,然后添加它们并更新 IsButtonEnable
get
部分内的条件。请检查并告诉我。
【讨论】:
看起来不错,想尝试一下,但愚蠢的问题,我从未使用过“NotifyPropertyChanged”。我应该使用哪个库? 有很多可用的框架我正在使用 MVVM.Framework 库。您也可以查看该链接LINK 是的,我正在使用 MVVM,MvvmLightLibsStud10,但它不能重新识别 NotifyPropertyChanged,不应该是 RaisePropertyChanged 吗? 有什么叫RaisePropertyChanged
正确的 'RaisePropertyChanged' 存在,但它不会禁用按钮:/以上是关于当 1 个或多个 TextBox 字段为空时禁用按钮的主要内容,如果未能解决你的问题,请参考以下文章
当textfield为空时禁用按钮等待其他文本字段中的任何更改