如何在WPF中禁用按钮

时间:2018-11-12 09:02:52

标签: c# wpf mvvm prism

我将按钮绑定到具有IsEnabled属性的ViewModel中,以使ViewModel中的按钮为true或false,但是无论何时将属性设置为false,都不会禁用它。

我的XAML

<Button x:Name="buttonSubmit" Margin="20,10,0,0" Height="30" Width="90" Content="Login" IsEnabled="{Binding IsLoginEnabled, Mode=TwoWay}" Command="{Binding LoginCommand}" CommandParameter="{Binding ElementName=txtPassword}"/>

ViewModel

public LoginViewModel(ILoginAuth loginAuth)
    {
        this.IsLoginEnabled = true;
        this.LoginCommand = new DelegateCommand(this.LoginUser);
    }

 public async void LoginUser()
    {
            this.IsLoginEnabled = false;
    }

2 个答案:

答案 0 :(得分:1)

我的第一个猜测是您没有在ViewModel中实现INotifyPropertyChanged。

检查这些链接:

Explain INotifyPropertyChanged In WPF - MVVM

How to: Implement the INotifyPropertyChanged Interface

您需要实现接口,以便ViewModel通知View某些更改并相应地更新UI。

答案 1 :(得分:1)

当您同时绑定了IsEnabled属性时,通常不会绑定Command。 ICommand对象的CanExecute方法控制是否启用Button:

public DelegateCommand LoginCommand { get; }
private bool canLogin = true;

public LoginViewModel(ILoginAuth loginAuth)
{
    LoginCommand = new DelegateCommand(LoginUser, () => canLogin);
}

public void LoginUser()
{
    canLogin = false;
    LoginCommand.RaiseCanExecuteChanged();
}