Sto provando a misurare un oggetto immediatamente dopo aver modificato DataContext, ma il binding per l'oggetto non viene aggiornato abbastanza presto. Qui è il mio codice:Aggiornamento del binding immediatamente quando DataContext cambia
// 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);
}
voglio le associazioni per l'oggetto View per aggiornare in modo che posso misurare quanto grande la vista deve essere per visualizzare il ViewModel. Sto riutilizzando la stessa vista per misurare perché sto virtualizzando i dati.
Qualcuno sa come forzare il binding ad aggiornare quando cambia DataContext?
Si noti che l'associazione si aggiorna infine.
La vista contiene un TextBlock che è l'elemento principale che modifica le dimensioni in base a ViewModel. Ho esaminato BindingExpression per TextProperty su questo elemento immediatamente dopo aver modificato DataContext, ma chiamare UpdateTarget() non risolve il problema e BindingExpression.DataItem sembra essere nullo.
MODIFICA: Lo stato di BindingExpression non è associato. Il trucco è capire come collegarlo.
Buona idea. Ci proverò. –
Ho ricevuto la seguente eccezione: Impossibile eseguire questa operazione mentre l'elaborazione del dispatcher è sospesa. Sembra che WPF blocchi il Dispatcher durante il layout. Sto eseguendo questo codice in MeasureOverride() –