当 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 将在UsernamePassword 更改时调用IsButtonEnable 来更新UI。您想添加更多属性,然后添加它们并更新 IsButtonEnable get 部分内的条件。请检查并告诉我。

【讨论】:

看起来不错,想尝试一下,但愚蠢的问题,我从未使用过“NotifyPropertyChanged”。我应该使用哪个库? 有很多可用的框架我正在使用 MVVM.Framework 库。您也可以查看该链接LINK 是的,我正在使用 MVVM,MvvmLightLibsStud10,但它不能重新识别 NotifyPropertyChanged,不应该是 RaisePropertyChanged 吗? 有什么叫RaisePropertyChanged 正确的 'RaisePropertyChanged' 存在,但它不会禁用按钮:/

以上是关于当 1 个或多个 TextBox 字段为空时禁用按钮的主要内容,如果未能解决你的问题,请参考以下文章

当文本字段为空时禁用警报按钮 Swift 3

仅当特定输入为空时,如何禁用按钮?

Sql最大错误[关闭]

当textfield为空时禁用按钮等待其他文本字段中的任何更改

字段为空时为 UISearchBar 启用“搜索”按钮? (IOS 7)

如何在对话框中将事件侦听器绑定到JavaFX TextFields。当字段为空时,“确定”按钮将被禁用,反之亦然