-1
我有一個彈出視圖與x:Name=This
,在其上delcared作爲一個按鈕如下:爲什麼我的登錄按鈕一直被禁用?
<Button Content="Log in" Command="{Binding Path=LoginCommand}" CommandParameter="{Binding ElementName=This}" />
這是爲了獲得對非綁定Password
屬性,這是一個SecureString
類型。
在我的構造函數初始化我的命令,像這樣:
public LoginPopupViewModel()
{
LoginCommand = new DelegateCommand<IHavePassword>(
LogUserIn,
p => !string.IsNullOrWhiteSpace(Username));
}
我完全相信,當我鍵入Username
東西,改變重點,屬性更改通知將幫助登錄按鈕。它沒有,所以我添加了額外的代碼,並且按鈕仍然保持禁用狀態。
public string Username
{
get { return _username; }
set
{
if (value == _username) return;
_username = value;
OnPropertyChanged();
CommandManager.InvalidateRequerySuggested();
}
}
如果我改變CanExecute代表像下面,才啓用按鈕:
public LoginPopupViewModel()
{
LoginCommand = new DelegateCommand<IHavePassword>(
LogUserIn,
p => true);
}
爲什麼這個按鈕保持甚至禁用時,其命令可以執行?
的'RaiseCanExecuteChanged'工作得很好,謝謝。起初我沒有找到它,因爲我的命令被聲明爲「ICommand」,而不是「DelegateCommand」。 – ProfK