Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 169307
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 11, 20262026-05-11T12:36:27+00:00 2026-05-11T12:36:27+00:00

I am trying to measure an object immediately after changing the DataContext, but the

  • 0

I am trying to measure an object immediately after changing the DataContext, but the binding for the object is not getting updated soon enough. Here’s my code:

// 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); } 

I want the bindings for the View object to update so that I can measure how large the View needs to be to display the ViewModel. I am reusing the same View to measure because I am virtualizing the data.

Does anyone know how to force the binding to update when the DataContext changes?

Note that the binding does update eventually.

The View contains a TextBlock that is the main element that changes size based on the ViewModel. I have looked at the BindingExpression for the TextProperty on this element immediately after changing the DataContext, but calling UpdateTarget() does not fix the problem and BindingExpression.DataItem appears to be null.

EDIT: The status of the BindingExression is Unattached. The trick is to figure out how to attach it.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. 2026-05-11T12:36:28+00:00Added an answer on May 11, 2026 at 12:36 pm

    Well, if after setting the DataContext, you did an Invoke on the Dispatcher at the DataBind priority, it should cause them all to be updated.

    Since this code is being executed inside the MeasureOverride method, you can’t do an Invoke on the Dispatcher. Instead, I would make a flag that indicated if the ruler width had been measured, and if not, do a BeginInvoke on the method that calculates those widths. Then, when the widths are calculated, call InvalidateMeasure to force a second layout pass.

    This is going to require an additional layout pass every time one of those widths changes. You will need to reset the flag to false whenever the textboxes have to be remeasured.

    private bool isRulerWidthValid = false;  protected override Size MeasureOverride(Size available) {     ... // other code for measuring     if (!isRulerWidthValid)     {          Dispatcher.BeginInvoke(new Action(CalculateRulerSize));         ... // return some temporary value here     }      ... // do your normal measure logic }  private void CalculateRulerSize(Size available) {     Size elemSize = new Size(double.PositiveInfinity, RowHeight);     m_inputWidth = 0.0;      foreach (MapElementViewModel elem in m_vm.InputElements)     {        ruler.DataContext = elem;        ruler.Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.DataBind);        ruler.Measure(elemSize);        m_inputWidth = Math.Max(m_inputWidth, ruler.DesiredSize.Width);     }      // invalidate measure again, as we now have a value for m_inputwidth     isRulerWidthValid = true;     InvalidateMeasure(); } 
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

i've been trying to find a method in C# to measure the size of
Trying to do this sort of thing... WHERE username LIKE '%$str%' ...but using bound
Trying to perform a single boolean NOT operation, it appears that under MS SQL
Trying to setup an SSH server on Windows Server 2003. What are some good
Trying to get my css / C# functions to look like this: body {
Trying to find some simple SQL Server PIVOT examples. Most of the examples that
Trying to make a make generic select control that I can dynamically add elements
Trying to keep all the presentation stuff in the xhtml on this project and
Trying to make a MySQL-based application support MS SQL, I ran into the following
Trying to create a QtRuby application, I get the following error: /usr/lib64/ruby/site_ruby/1.8/Qt/qtruby4.rb:2144: [BUG] Segmentation

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.