私のようにdelcaredボタンその上、x:Name=This
とポップアップビューを持っているが、以下:ログインボタンは常に無効になっていますか?
<Button Content="Log in" Command="{Binding Path=LoginCommand}" CommandParameter="{Binding ElementName=This}" />
これはSecureString
タイプである非バインド可能Password
プロパティへのアクセスを獲得することです。
:
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'がうまく働いた、感謝です。私の命令は「DelegateCommand」ではなく「ICommand」と宣言されていたので、最初は見つからなかった。 – ProfK