2

ユーザー名テキスト ボックスとパスワード ボックスを含むログイン フォームがあります。

両方のフィールドに値が含まれている場合にのみ、[OK] ボタンを有効にしたいと考えています。

すべての文字列が null または空であるかどうかをチェックするコンバーターがあります。

Convert メソッドの最初の行にブレークポイントを配置しました。ブレークポイントは、MenuItem初期化時、あとがき、つまりテキストを変更したときにのみ停止します。

次の例はうまく機能します。問題は、テキストを変更したときにマルチバインディングがトリガーされないことです。フォームを初期化するときにのみバインドされます。

<!--The following is placed in the OK button-->
<Button.IsEnabled>
    <MultiBinding Converter="{StaticResource TrueForAllConverter}">
        <Binding ElementName="tbUserName" Path="Text"/>
        <Binding ElementName="tbPassword" Path="Password"/>
    </MultiBinding>
</Button.IsEnabled>

問題は、リモートバインディングソースが変更されたときに通知されないことだと思います(たとえば、設定するオプションがありませんUpdateTargetTrigger="PropertyChanged".

何か案は?

4

3 に答える 3

2

コマンドバインディングを検討することをお勧めします。コマンドは、いくつかの条件 (つまり、ユーザー名とパスワードが空でない) に応じて、ログイン ボタンを自動的に有効または無効にすることができます。

public static RoutedCommand LoginCommand = new RoutedCommand();

private void CanLoginExecute(object sender, CanExecuteRoutedEventArgs e)
{
    e.CanExecute = !string.IsNullOrEmpty(_userInfo.UserName) && !string.IsNullOrEmpty(_userInfo.Password);
    e.Handled = true;
}

private void LoginExecute(object sender, ExecutedRoutedEventArgs e)
{
    MessageBox.Show("Loging in...");
    // Do you login here.
    e.Handled = true;
}

XAML コマンド バインディングは次のようになります。

<TextBox Text="{Binding UserName, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Text="{Binding Password, UpdateSourceTrigger=PropertyChanged}" />
<Button Command="local:LoginWindow.LoginCommand" >Login</Button>

コマンドを XAML に登録するには

<Window.CommandBindings>
    <CommandBinding Command="local:LoginWindow.LoginCommand" CanExecute="CanLoginExecute" Executed="LoginExecute" />
</Window.CommandBindings>

またはコードビハインドで

public LoginWindow()
{
    InitializeComponent();

    CommandBinding cb = new CommandBinding(LoginCommand, CanLoginExecute, LoginExecute);
    this.CommandBindings.Add(cb);
}

詳細については、こちらをご覧ください

于 2009-10-14T15:41:59.063 に答える
0
Private Sub tb_Changed(sender As Object, e As RoutedEventArgs) _
        Handles tbUsername.TextChanged, _
                tbPassword.PasswordChanged
    btnOk.IsEnabled = tbUsername.Text.Length > 0 _
              AndAlso tbPassword.Password.Length > 0
End Sub
于 2009-09-30T16:28:40.277 に答える
0

UpdateSourceTriggertoPropertyChangedModetoを設定してみてくださいTwoWay。これにより、入力時にプロパティが更新されます。ただし、これがコンバーターで機能するかどうかはわかりません。

于 2009-09-30T04:31:32.480 に答える