/************************************************************************************* Extended WPF Toolkit Copyright (C) 2007-2013 Xceed Software Inc. This program is provided to you under the terms of the Microsoft Public License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license For more features, controls, and fast professional support, pick up the Plus Edition at http://xceed.com/wpf_toolkit Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids ***********************************************************************************/ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.ComponentModel; using System.Windows.Data; using System.Windows.Threading; namespace Xceed.Wpf.AvalonDock.Controls { class BindingHelper { public static void RebindInactiveBindings(DependencyObject dependencyObject) { foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(dependencyObject.GetType())) { var dpd = DependencyPropertyDescriptor.FromProperty(property); if (dpd != null) { BindingExpressionBase binding = BindingOperations.GetBindingExpressionBase(dependencyObject, dpd.DependencyProperty); if (binding != null) { //if (property.Name == "DataContext" || binding.HasError || binding.Status != BindingStatus.Active) { // Ensure that no pending calls are in the dispatcher queue Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.SystemIdle, (Action)delegate { // Remove and add the binding to re-trigger the binding error dependencyObject.ClearValue(dpd.DependencyProperty); BindingOperations.SetBinding(dependencyObject, dpd.DependencyProperty, binding.ParentBindingBase); }); } } } } } } }