0

我尝试了一些解决方案,但它们似乎适用于 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;
        }
    }
}
4

1 回答 1

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 属性,如

#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将调用IsButtonEnable更新 UI 。您想添加更多属性,然后添加它们并更新部分内的条件。请检查并让我知道。UsernamePasswordIsButtonEnable get

于 2021-01-29T18:50:20.393 回答