WPF如何在处理更多代码之前等待绑定更新?

Jam*_*eet 7 c# wpf xaml

据我所知,调度程序发生在另一个线程中,它负责更新数据绑定,布局等.但是,有没有办法等到调度程序没有更多的项目或至少没有更多的数据绑定?我想确保属性更改已更新其所有组件,并在运行更多代码之前运行依赖属性更改的回调.

编辑:所以我猜这不是必需的,我只是想了解我应该做些什么.我的主要问题是WPF,如果滚动查看器的子项调整大小,滚动查看器会自动更新其范围吗?

但我也很好奇我是否可以等待绑定更新,或者是否有任何保证一个绑定在另一个之前更新?我是否希望编码以使绑定更新的顺序无关紧要?目前我使用依赖属性更改回调来执行各种通常依赖于其他属性更新的东西

Tor*_*mme 7

调度员有几个处理单个任务的优先级.我很确定你不能改变依赖属性回调的优先级.如果它们被数据绑定更改,它们将与DispatcherPriority.DataBinding优先级一起排队.您操纵某些依赖项属性的值,这将导致布局/其他依赖项属性更改.并且您希望在第一次操作之后等待,直到处理这些布局更新/更改,然后使用当前UI状态执行某些操作?

WinForms具有针对此类情况的DoEvents函数,这导致在正常代码执行继续之前处理所有UI事件.WPF没有这样的内置函数,但您可以编写自己的DoEvent:

public static void DoEvents()
{
  if (Application.Current == null)
    return;
  Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, (Delegate) (() => {}));
}
Run Code Online (Sandbox Code Playgroud)

同步调用空委托,这意味着在调度程序执行委托之后调用将返回.DispatcherPriority.Background的优先级非常低,因此在调度数据绑定,布局更新或呈现之后处理此调度程序调用. http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcherpriority.aspx

因此,在第一次操作依赖项属性之后,在您想要读取其他依赖项属性之前调用DoEvents(),它应该完成.