我将按钮绑定到具有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;
}
答案 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();
}