Phi*_*ler 20 data-binding wpf exception
我正在学习WPF,并且对数据绑定异常不会导致运行时/未处理的异常这一事实感到困惑.
任何人都可以用这种方式解释数据绑定的好处吗?我假设有有益处,但到目前为止,我没有看到任何(免责声明:我刚开始使用数据绑定).
解释理论(或实际)理由的资源链接也可以起作用.
我不确定,但我怀疑是因为没有地方可以处理异常.
假设您要绑定某些属性,但有时候某些内容为null.(例如,{Binding Name.Length}Name是一个字符串属性,可能为null.)在这种情况下,你很高兴这是一个无操作,因为你知道当Name为null时,控件永远不会显示(由于一个触发器说)或者因为你知道当绑定源加载它的数据时这将是一个瞬态条件.
现在假设当尝试在空名称字符串上调用Length时,WPF传播了NullReferenceException.在程序代码中,你会抓住这个异常并吞下它,因为你知道它是良性的. 但是你不能在WPF绑定代码周围放置一个异常处理程序. 它是从WPF内部的某个地方调用的.因此异常将一直冒泡到Application.Run,这不是一个非常有用的地方来捕获它.
因此,不是让你在Application.Run中集中你的绑定异常处理程序,我认为WPF的人决定自己吞下异常.只有一个理论......
我认为这是因为制作例外的成本太高了.即使在存在一些无效绑定的情况下,当前实现也可以工作,并且当前形式实际上可以对性能产生非常显着的影响.以此示例为例,创建一个执行绑定的DataGrid,并将1,000条记录加载到其中.测量所有绑定的性能是否正确,并且其中一个绑定错误.差异很大.添加在那个站起来的异常类实例之上,它可能会失控.只是我的观点.