title: Databinding falls behind event notification - discussion
body: <p>Found an interesting problem that I first found in WinForms, and found again in Silverlight, and more than likely WPF as well when it comes to databinding.</p>
  
  <p>I have a tab control with several tabs.  As users click across the tabs, each time should be valid before allowing the user to switch from the tab.</p>
  
  <p>For example, user is in a text box which is updated.  Binding of text boxes is not flushed until the control loses focus.  Loss of focus occurs when the cursor is moved from the control, and focus is given to another control.</p>
  
  <p>In this scenario, the user tabs into a control (let's use text box for this example), and updates the text box.  At this point the databinding has not flushed the control, and hence the VM has not yet seen the change.  The user then uses their mouse to click the next tab of the control.</p>
  
  <p>At this point things get interesting.  I used the PreviewSelectionChanged (Telerik RadTabControl), as I want to check things out before the jump to the next tab occurs, and it also gives me the ability to cancel the event.  </p>
  
  <p>However, when I look at the VM, in this event, it still does not have the updated data.  I see the VM is clean, and go ahead and allow the jump to the next tab.</p>
  
  <p>As soon as this event is over however, the databindings flush, and the VM gets updated. what now? The events are out of sync!  When the mouse was used to click the next tab, the textbox should have lost focus, flushed it's bindings, before the Preview of the Tab click! It's to late to jump back and say oops we didn't catch that in time!</p>
  
  <p>I think I found an interesting work around to this issue - but I'm not 100% sure it will work 100% of the time.  I cancel the current event, but then I use the Dispatcher and create a delegate pointing to another method with the same signature as the current event.  The Dispatcher will add this message to the message pump, which by this time will now (hopefully?) be behind the messages of the VM updating...</p>
  
  <p><img src="https://i.stack.imgur.com/5WY2g.jpg" alt="Code Snippet delaying the event"></p>
  
  <p>My two questions are:
  1) I'm assuming that the textbox control either didn't flush when the mouse left the control, or the process that was fired was too slow and hence the preview message was on the pump before the databinding - either way I see this to be a major issue.</p>
  
  <p>2) Is the workaround a good solution?</p>