Не знаю точно, но подозреваю, что это потому, что исключить некуда.
Предположим, у вас есть что-то, чьи свойства вы хотите связать, но иногда это что-то нулевое. (Например, {Binding Name.Length}
, где Name - это строковое свойство, которое может иметь значение null.) В этом случае вы рады, что этот параметр не используется, поскольку вы знаете, что элемент управления никогда не будет отображаться, когда Name равно null (из-за, скажем, триггера) или потому что вы знаете, что это будет переходное состояние, пока источник привязки загружает свои данные.
Теперь предположим, что WPF распространял исключение NullReferenceException при попытке вызвать Length в пустой строке Name. В процедурном коде вы поймали это исключение и проглотили его, потому что знали, что оно мягкое. Но вы не можете поместить обработчик исключений вокруг кода привязки WPF. Он вызывается откуда-то глубоко внутри WPF. Таким образом, исключение будет всплывать вплоть до Application.Run, что не очень полезно для его обнаружения.
Так что вместо того, чтобы заставлять вас централизовать обработчики обязательных исключений в Application.Run, я думаю, что ребята из WPF решили проглотить сами исключения. Только теория, хотя ...