У меня есть мнение всплывающего с x:Name=This
, на нем кнопку delcared следующим образом:Почему моя кнопка входа всегда отключена?
<Button Content="Log in" Command="{Binding Path=LoginCommand}" CommandParameter="{Binding ElementName=This}" />
Это, чтобы получить доступ к не-привязываемому Password
собственности, которая является SecureString
типом.
В моем CTOR я инициализирую команду так:
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