1

ご存知のように、Delegate には 2 つのプロパティがあります。1 つはメソッド infor 用で、もう 1 つはターゲット オブジェクト用です。しかし、WinRT では非常に奇妙です。ビュー モデルが以下のように INotifyPropertyChanged を実装する場合:

public class PropertyChangedViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged
    {
        add { /*some code to add handler of value*/ }
        remove { /*some code to removehandler of value*/ }
    }
}

メソッド「add」および「remove」で、このイベントが XAML バインディングの内部コードで使用されている場合、value.Target が null であることがわかります。つまり、ビュー モデルのプロパティを xaml ファイルにバインドすると、winrt はこのビュー モデルの PropertyChanged イベントを自動的に登録し、add メソッドが呼び出されますが、この add にブレーク ポイントを配置しました。メソッドを検索し、値のターゲットが null であることを確認します。クロス プラットフォームの mvvm ライブラリ (wpf、winrt、silverlight、および wp 7+ 用) を実装しているため、PropertyChangedEventManager を使用できません。ターゲットへの弱い参照を手動で保持してから、ターゲットでメソッドを呼び出す必要があります。残念ながら、ターゲットは null ですが、メソッドは静的メソッドではないため、後でこのイベントをトリガーすると例外が発生します。回避策はありますか?

ありがとう!

4

0 に答える 0