質問

私は、ユーザー名テキストボックスとパスワードボックスが含まれているログインフォームを持っています。

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

私は、彼らがnullまたは空のなら、すべての文字列をチェックするコンバータを内蔵しています。

私はテキストを変更するとき、それはない、すなわち、ワーズ、Iは変換メソッドの最初の行にブレークポイントを配置し、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"を設定するオプションは何もあり(問題は、リモート・バインディングソースが変更されたときに通知されませんということだと思いません。

任意のアイデア?

役に立ちましたか?

解決

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

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);
}

よりreadigin ここを。

他のヒント

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

UpdateSourceTriggerするPropertyChangedModeするTwoWayを設定してみてください。これは、プロパティを使用するタイプのように更新されます。これはしかし、あなたのコンバータで動作するかどうかわからない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top