要素をバインドするMultiBindingのを使用して
-
19-09-2019 - |
質問
私は、ユーザー名テキストボックスとパスワードボックスが含まれているログインフォームを持っています。
私は、フィールドの両方に値が含まれている場合、[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
するPropertyChanged
とMode
するTwoWay
を設定してみてください。これは、プロパティを使用するタイプのように更新されます。これはしかし、あなたのコンバータで動作するかどうかわからない。
所属していません StackOverflow