コマンドビヘイビアを使用してカスタムコントロールを作成していて、何か奇妙なことが起こりました。私が見つけたいくつかの記事は、CanExecuteChangedHandler EventHandlerを静的と宣言し、他は静的ではないと宣言しました。 MicrosoftのSDKドキュメントは静的を示していますが、静的として宣言すると、複数のコントロールを使用すると奇妙な動作が発生します。WPFコントロールで静的または非静的としてEventHandlerを宣言する
private static EventHandler canExecuteChangedHandler;
private void AddSecureCommand(ISecureCommand secureCommand)
{
canExecuteChangedHandler = new EventHandler(CanExecuteChanged);
securityTypeChangedHandler = new EventHandler(SecurityTypeChanged);
if (secureCommand != null)
{
secureCommand.CanExecuteChanged += canExecuteChangedHandler;
secureCommand.SecurityTypeChanged += securityTypeChangedHandler;
}
}
誰でも適切な方法を知っていますか?静的なEventHandlerが動作しない原因となっている何か間違ったことをしていますか?
私はガベージコレクションの理由を理解しており、私はクラスレベルで宣言されたEventHandlerを持たなければならないことを知っています。私が抱えている問題は、クラスが複数回インスタンス化されたときに、静的なときに奇妙な動作が発生することです。 – Brady
改行を追加してコメントを投稿しました。上記のコメントを編集しようとしましたが、明らかに私はそれを更新するのに5分しかかかりません。上で詳述する...私が抱えている問題は、クラス(またはコントロール)を複数回インスタンス化するときに、静的なときに奇妙な動作が発生することです。私はEventHandlerデリゲートのターゲットがインスタンス固有のものであることをもう少し詳しく調べました。私の場合は静的なEventHandlerを使用して問題を引き起こしています。私は静的なEventHandlerを使うことができる時があるかもしれないが、私の場合はうまくいかないと思う。 – Brady
あなたの要点を要約すると、イベントハンドラの参照は、メソッドが静的な場合にのみ静的になることがあります。コマンドイベントに追加した後も変更しないように注意する必要があります。私は答えを更新します。 –