【问题标题】:Disable button when 1 or more TextBox fields are empty当 1 个或多个 TextBox 字段为空时禁用按钮
【发布时间】: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;
        }
    }
}

【问题讨论】:

    标签: c# mvvm uwp


    【解决方案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' 存在,但它不会禁用按钮:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 2021-05-11
    相关资源
    最近更新 更多