ElementHostコントロール(WPF UserControlを含む)と保存ボタンを含むWinFormsフォームがあります。ElementHostコントロールでのWPF検証
私はWPF UserControlにいくつかの検証を含むテキストボックスを持っています。このようなもの...
これはすべて正常に動作します。しかし、私がしたいのは、フォームが無効な状態になっている間に[保存]ボタンを無効にすることです。
ご協力いただければ幸いです。
ElementHostコントロール(WPF UserControlを含む)と保存ボタンを含むWinFormsフォームがあります。ElementHostコントロールでのWPF検証
私はWPF UserControlにいくつかの検証を含むテキストボックスを持っています。このようなもの...
これはすべて正常に動作します。しかし、私がしたいのは、フォームが無効な状態になっている間に[保存]ボタンを無効にすることです。
ご協力いただければ幸いです。
まあ、私は最終的に私の問題の解決策を見つけました。
WPFコントロールでは、これをLoaded
イベントに追加しました。上記
Validation.AddErrorHandler(this.txtSomething, ValidateControl);
場合ValidateControl
、このように定義される:
private void ValidateControl(object sender, ValidationErrorEventArgs args)
{
if (args.Action == ValidationErrorEventAction.Added)
OnValidated(false);
else
OnValidated(true);
}
Iは、そのイベント引数でIsValid
ブールを含んValidated
というイベントを追加しました。私はコントロールが有効であるかどうかを私のフォームに伝えるために、このイベントをフックすることができました。
もっと良い方法があれば、私は学ぶことに興味があるでしょう。
私は、これはあなたを助けるべきだと思う:
<UserControl Validation.Error="Validation_OnError >
<UserControl.CommandBindings>
<CommandBinding Command="ApplicationCommands.Save" CanExecute="OnCanExecute" Executed="OnExecute"/>
</UserControl.CommandBindings>
...
<Button Command="ApplicationCommands.Save" />
...
</UserControl>
/* put this in usercontrol's code behind */
int _errorCount = 0;
private void Validation_OnError(object sender, ValidationErrorEventArgs e)
{
switch (e.Action)
{
case ValidationErrorEventAction.Added:
{ _errorCount++; break; }
case ValidationErrorEventAction.Removed:
{ _errorCount--; break; }
}
}
private void OnCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = _errorCount == 0;
}
その後、あなたはおそらく、ユーザーコントロールに登録されたイベントでの変更についてのMainFormを知らせることができます。