3

最近、コードのOneWayToSourceバインディングをビューモデルの読み取り専用プロパティに追加しました。当時、私は.Net 4の変更について知りませんでした。これにより、ゲッターがない場合に例外が発生します。

<Popup IsOpen="{Binding IsPopupOpen, Mode=OneWayToSource}" />
...
public bool IsPopupOpen
{
    set
    {
        // do something with value
    }
}

問題は、このコードが例外をスローせずに私のコンピューターで機能することです。まったく同じ実行可能ファイルは他のマシンでは機能しません。ポップアップは開かず、予期された例外がスローされます。これがどのように可能かわかりませんか?プロジェクトは.NetFW4を対象としています。

binフォルダーをクリアして再構築するようにしましたが、他のマシンではなく、自分のマシンでも例外なく機能しています。

これを「修正」する方法を知っています。プロパティにゲッターを追加するだけです。ただし、他の深刻な問題を引き起こす可能性があるため、プログラムが異なるマシンでどのように異なる機能を果たしているかを理解する必要があります...

編集:

これは私を怒らせています!Snoop WPFユーティリティを使用してポップアップを確認しましたが、IsOpenへのバインドがまったくないようです(バインドはXAMLに新しく追加されたものです)。ただし、デバッガーをアプリに接続し、バインドされたプロパティのセッター内にブレークポイントを設定すると、ブレークポイントに到達します!!

4

1 に答える 1

2

ちょっと推測。

net 4.0 でのこの変更の後、.net 4.5 でより一貫性のあるものにすることを決定した可能性があります。ゲッターが存在する場合、プロパティは UI に再読み込みされます。そうでない場合、ひどいことは何も起こらず、例外もスローされません。

その場合、.net 4.5 がインストールされていると、予想される動作ではなく、この動作が発生する可能性があります。
4.5 への更新が 4.0 に暗黙のうちに伝播されるケースに遭遇しました。

于 2013-02-19T21:47:59.830 に答える