WPF がデータバインディング例外を飲み込むのはなぜですか? 質問する

WPF がデータバインディング例外を飲み込むのはなぜですか? 質問する

私は WPF を学習中ですが、データ バインディング例外がランタイム/未処理例外を引き起こさないという事実に困惑しています。

このようにデータバインディングが機能することの利点を説明できる人はいますか?メリットはありますが、今のところ何も見当たりません (免責事項: データバインディングを始めたばかりです)。

この決定を下す理論的 (または実際的) な理由を説明するリソースへのリンクも有効です。

ベストアンサー1

確かなことはわかりませんが、例外を処理する場所がないことが原因ではないかと考えています。

プロパティをバインドしたいものがあるが、その何かが null になることがあるものとします。(たとえば、{Binding Name.Length}では、Name は null になる可能性のある文字列プロパティです。) この場合、Name が null のときはコントロールが表示されないことがわかっているため (トリガーなどにより)、または、バインディング ソースがデータを読み込んでいる間の一時的な状態であることがわかっているため、これを no-op にしても問題ありません。

ここで、WPF が null の Name 文字列で Length を呼び出そうとしたときに NullReferenceException を伝播したとします。手続き型コードでは、この例外をキャッチして、無害であることがわかっているため、それを受け入れます。ただし、WPF バインディング コードの周囲に例外ハンドラーを配置することはできません。これは WPF の奥深くから呼び出されます。そのため、例外は Application.Run までバブルアップしますが、これは例外をキャッチするのにあまり便利な場所ではありません。

したがって、バインディング例外ハンドラーを Application.Run まで一元管理するのではなく、WPF の開発者は例外を自ら処理することにしたと思います。ただし、これは単なる理論です...

おすすめ記事