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