更改DataContext后立即测量所需的控件大小

时间:2016-11-09 19:47:00

标签: c# .net wpf

我有一个自定义控件,我想在画布上渲染。在渲染之前,我必须首先计算它的大小。我有这个代码,我想在渲染之前得到控件的大小:

var customView = (Control)Activator.CreateInstance(viewModel.CustomViewType);
customView.DataContext = viewModel;
// Bindings not updated yet... I want to update them here
customView.Measure(new Size(double.MaxValue, double.MaxValue));

// Use customView.DesiredSize

但是,在分配DataContext之后立即测量控件并不能及时更新绑定以获得适当大小的元素。如何确保在设置DataContext后立即更新绑定,以便我可以进行正确的测量?

我在设置DataContext

后尝试添加
 customView.Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.DataBind);

这一行在System.InvalidOperationException中导致WindowsBase.dll,但没有出现问题的信息。

更新:建议的其他类似问题是Updating Binding immediately when DataContext changes。我不认为这个答案适合我的情况。因为我正在使用自定义视图(可以来自任何地方),所以如果可能的话,我希望避免强制每个视图符合MeasureOverride的实现。此外,在测量之前调用调度程序操作会给出上述错误。

0 个答案:

没有答案