我在WPF中编写自定义控件 . 该控件具有几个属性,可以更新控件的逻辑树 . 这种形式有几种方法:
private static void OnXXXPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
((MyControl)obj).RebuildTree();
}
假设 RebuildTree()
方法非常复杂和冗长,并且如果用户更改了多个属性,则会多次调用此方法,从而导致应用程序减速和挂起 .
我想以Windows窗体的方式介绍类似 BeginUpdate()
和 EndUpdate()
方法的东西(以确保只调用一次更新),但在WPF中这种做法被广泛劝阻 .
我知道渲染器的优先级较低,闪烁可能不会出现,但仍然可以通过多次调用相同的更新方法来破坏宝贵的运行时间?
Is there any official best practice on how to make efficient update of multiple dependency properties (without updating the entire control after setting each one)?
1 回答
只需在任何这些属性发生更改时设置标志,并将刷新方法排队到Dispatcher一次 .
这样,您的所有属性都将被更新,然后Dispatcher将调用您的
BeginInvoke
,将标志设置为false并仅刷新一次 .