Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改DataContext后立即测量所需的控件大小_C#_.net_Wpf - Fatal编程技术网

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

C# 更改DataContext后立即测量所需的控件大小,c#,.net,wpf,C#,.net,Wpf,我有一个自定义控件,我想在画布上渲染它。在渲染它之前,我必须首先计算它的大小。我有一段代码,我想在呈现控件之前获取它的大小: var customView = (Control)Activator.CreateInstance(viewModel.CustomViewType); customView.DataContext = viewModel; // Bindings not updated yet... I want to update them here customView.Meas

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

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);
该行在
WindowsBase.dll
中导致出现
System.InvalidOperationException
,而没有关于出错原因的信息

更新:提出了另一个类似的问题。我认为这个答案不适合我的情况。因为我使用的是自定义视图(可以来自任何地方),所以如果可能的话,我希望避免强制每个视图符合
MeasureOverride
的实现。此外,在测量之前调用dispatcher操作会产生上述错误。

可能重复的