同じWPFフォームの3つのテキストボックスにテキスト(ユーザー、パスワード、サーバー)が入力されるまで無効にしたい「ログイン」ボタンがあります。
3 つのコントロールすべてにデータがある場合にのみ True を返す IsLoginEnabled というブール値プロパティを持つバッキング オブジェクトがあります。ただし、いつこのプロパティをチェックする必要がありますか? 3 つの依存コントロールのそれぞれの LostFocus イベントにあるべきですか?
ありがとう!
vg1890
同じWPFフォームの3つのテキストボックスにテキスト(ユーザー、パスワード、サーバー)が入力されるまで無効にしたい「ログイン」ボタンがあります。
3 つのコントロールすべてにデータがある場合にのみ True を返す IsLoginEnabled というブール値プロパティを持つバッキング オブジェクトがあります。ただし、いつこのプロパティをチェックする必要がありますか? 3 つの依存コントロールのそれぞれの LostFocus イベントにあるべきですか?
ありがとう!
vg1890
IsLoginEnabled3 つのフィールドのいずれかが更新されたときに、変更されたイベントを発生させる「バッキング オブジェクト」を取得します。次に、ボタンを IsLoginEnabled プロパティにバインドすると、チェックし続ける必要がなくなります。
擬似コードは次のようになります。
Public Event IsLoginEnabledChanged As EventHandler
Public Property User() As String
Get.. ' snipped for brevity
Set(ByVal value As String)
mUser = value
RaiseEvent IsLoginEnabledChanged(Me, New EventArgs())
End Set
' do the same in the Set for Password() and Server() properties
これの秘訣は、イベントに名前を付けることです[PropertyName]Changed(つまりIsLogonEnabledChanged)-このイベントを発生させると、バインドされたコントロールに自動的に通知されるためです:o)
はい、最も簡単なオプションは、これらの各コントロールの LostFocus または TextChanged イベントで確認することです。ただし、もう少し重い処理を行う場合は、ボタンの有効化にバインドできる依存関係プロパティとしてブール値を実装できます。 http://msdn.microsoft.com/en-us/library/ms750428.aspx
WPF の最も便利な機能の 1 つであるRoutedCommandsを使用できると思います。基本的にCommandBindingを追加し、 OnExecuteとOnQueryCommandEnabledを使用してボタンの有効状態を管理します。
IsLoginEnabled をログイン ボタンの Enabled プロパティに直接データバインドできますか?