Я пытаюсь измерить объект сразу после изменения DataContext, но привязка для объекта не будет обновляться достаточно быстро. Вот мой код:Обновление привязки сразу после изменения DataContext
// 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);
}
Я хочу привязки для представления объекта для обновления, так что я могу определить, насколько велика View должна быть для отображения ViewModel. Я повторно использую один и тот же вид для измерения, потому что я виртуализую данные.
Кто-нибудь знает, как заставить привязку обновляться при изменении DataContext?
Обратите внимание, что привязка действительно обновляется.
View содержит текстовый блок, который является основным элементом, который изменяет размер на основе ViewModel. Я посмотрел на BindingExpression для TextProperty на этом элементе сразу после изменения DataContext, но вызов UpdateTarget() не устраняет проблему, а BindingExpression.DataItem выглядит как null.
РЕДАКТИРОВАТЬ: Состояние привязки: Непривязанный. Трюк состоит в том, чтобы выяснить, как его прикрепить.
Хорошая идея. Я попробую. –
Я получил следующее исключение: Не удается выполнить эту операцию, пока обработка диспетчера приостановлена. Похоже, WPF блокирует Диспетчер во время компоновки. Я запускаю этот код в MeasureOverride() –