2009-07-07 17 views
0

ElementHostコントロール(WPF UserControlを含む)と保存ボタンを含むWinFormsフォームがあります。ElementHostコントロールでのWPF検証

私はWPF UserControlにいくつかの検証を含むテキストボックスを持っています。このようなもの...

これはすべて正常に動作します。しかし、私がしたいのは、フォームが無効な状態になっている間に[保存]ボタンを無効にすることです。

ご協力いただければ幸いです。

答えて

0

まあ、私は最終的に私の問題の解決策を見つけました。

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というイベントを追加しました。私はコントロールが有効であるかどうかを私のフォームに伝えるために、このイベントをフックすることができました。

もっと良い方法があれば、私は学ぶことに興味があるでしょう。

1

私は、これはあなたを助けるべきだと思う:

<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を知らせることができます。

関連する問題