Ich versuche, ein Objekt sofort nach dem Ändern des DataContext zu messen, aber die Bindung für das Objekt wird nicht bald genug aktualisiert. Hier ist mein Code:Aktualisieren Bindung sofort, wenn DataContext ändert
// In MeasureOverride(Size)
m_inputWidth = 0.0;
Size elemSize = new Size(double.PositiveInfinity, RowHeight);
MapElementView ruler = new MapElementView();
// Measure inputs
foreach (MapElementViewModel elem in m_vm.InputElements)
{
ruler.DataContext = elem;
ruler.Measure(elemSize);
m_inputWidth = Math.Max(m_inputWidth, ruler.DesiredSize.Width);
}
Ich mag die Bindungen für das View-Objekt zu aktualisieren, damit ich messen kann, wie groß die Ansicht muß, um das Ansichtsmodell anzuzeigen. Ich verwende dieselbe Ansicht erneut, um zu messen, weil ich die Daten virtualisiere.
Kann jemand die Bindung erzwingen, um zu aktualisieren, wenn sich der DataContext ändert?
Beachten Sie, dass die Bindung schließlich aktualisiert wird.
Die Ansicht enthält einen TextBlock, bei dem es sich um das Hauptelement handelt, das die Größe basierend auf dem ViewModel ändert. Ich habe die BindingExpression für die TextProperty für dieses Element unmittelbar nach dem Ändern des DataContext untersucht, aber das Aufrufen von UpdateTarget() behebt das Problem nicht, und BindingExpression.DataItem scheint null zu sein.
EDIT: Der Status der BindingExpression ist nicht verknüpft. Der Trick besteht darin, herauszufinden, wie man es anhängt.
Gute Idee. Ich werde es versuchen. –
Ich habe die folgende Ausnahme: Kann diesen Vorgang nicht ausführen, während Dispatcher-Verarbeitung unterbrochen ist. Es scheint, dass WPF den Dispatcher während des Layouts sperrt. Ich führe diesen Code in MeasureOverride() –