我正在使用相当复杂的WPF窗口,其中包含很多控件。 在我的上下文中,我们选择的用户体验是首先显示窗口,然后加载数据和数据绑定(同时显示进度条)。
借助Visual Studio中的WPF跟踪,我注意到在显示窗口之前调用了两次数据绑定:
由于还没有数据,数据绑定机制需要相当长的时间来尝试回退和默认值。
为了加快向用户显示窗口,有没有办法在窗口显示之前禁用WPF数据绑定?
提前致谢。
编辑1 : 我在表单上有400多个控件。对InitializeComponent()的调用需要700ms才能完成。我不知道其中有多少与数据绑定有关,可能是我弄错了。
编辑2 : 根据dotTrace分析器,InitilizeComponent()WPF成本为65.43%分为:
编辑3 : 我们将InitializeComponent()降低到272ms。 我们有很多转换器,singletons现在用于所有转换器。
答案 0 :(得分:0)
当然。
一个直接的选择是删除与数据绑定相关的XAML标记,并从代码隐藏中执行相同的操作,但仅在窗口显示之后(或在您认为合适的任何其他条件下)。有关如何在代码中进行数据绑定,请参阅此MSDN example。
另一个选择是不直接绑定到你的“真实”数据源(不清楚为什么会导致速度减慢,但我会接受你的话)而是代理具有开/关切换的对象:从关闭开关开始,使代理返回空数据集,并在窗口显示后将其打开。
答案 1 :(得分:0)
有趣的一点。绑定时间如此之大?
在InitializeComponent()
DataContext
中通常为空,并且应该花费几毫秒来解析绑定。问题可能出在另一个地方。
在DataBinding机制中使用默认值是清晰,快速和简单的。