1

SL 4.0でMVVMの作業を少し行っていますが、イベントが発生し、null以外であるにもかかわらず、呼び出されないイベントハンドラーがあります。

まず、イベントハンドラーをアタッチします。私はこれをステップスルーし、イベントハンドラーを追加した後、PropertyChangedがnullではなくなったことに気付きましたが、invocationCountは0のままであり、invocationListはnullのままです。それは期待されていませんよね?

node.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(OnMonitoredDataSourceNodePropertyChanged);

次に、プロパティを変更し、次のようにOnPropertyChangedメソッドを呼び出します。

OnPropertyChanged("CheckState");

これはメソッドを起動します。私はそれをステップスルーし、PropertyChangedイベントを検査すると、予期されるのはNULLではありませんが、invocationCountは3であり、invocationListには4つのオブジェクトがあり、最後のオブジェクトはNULLです。それは私には意味がありません。以前に割り当てられたハンドラーは1つだけである必要があります。代わりに、他のリストであり、元のハンドラーが含まれていないリストです。

public void OnPropertyChanged(string propertyName) {
        if (this.PropertyChanged != null) {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

したがって、PropertyChangedは起動されますが、ハンドラーが呼び出されることはありません。私はこれで数時間壁に頭を打ちつけてきました、どんな助けでもありがたいです。

4

1 に答える 1

1

質問に表示されているように、コードに問題はありません。これは、1)コードがここに示されているとおりではない、または2)最初の部分でリスナーを追加するインスタンスが起動しているインスタンスではないことを示唆しますOnPropertyChanged。2番目は私の賭けです。

これをテストするには、アプリケーションをデバッグし、リスナーを追加する場所と起動する場所にブレークポイントを設定する必要がありますOnPropertyChanged

Visual Studio内で、最初のブレークポイントに到達したら、変数によって参照されるインスタンスにオブジェクトIDを作成します。nodeアプリケーションに実行を継続させます。

2番目のブレークポイントがでヒットしたら、OnPropertyChangedのオブジェクトIDを調べますthis。インスタンスが同じであるかどうかがわかります。

デバッグのすべてにおいて、あなたの仮定が何であるかを決定します。それはあなたのバグが存在する場所だからです。

于 2012-08-07T19:52:14.293 に答える