# # Silverlight Spy databinding Inspector # from System.Windows import * from System.Windows.Data import * from FirstFloor.SilverlightSpy.Interop import * def IsValidBinding(binding, context): try: path = binding.Path.Path if (len(path) > 0): eval("context." + path) return True else: return context != None except: return False propertyCount = 0 bindingCount = 0 invalidBindingCount = 0 for element in VisualTreeHelperEx.Descendants(Application.Current.RootVisual): for property in DependencyObjectExtensions.DependencyProperties(element): propertyCount += 1 value = element.ReadLocalValue(property.Property) if (isinstance(value, BindingExpression)): bindingCount += 1 binding = value.ParentBinding isvalid = IsValidBinding(binding, value.DataItem) if (not(isvalid)): invalidBindingCount += 1 source = 'None' if (value.DataItem != None): source = value.DataItem.GetType().FullName print 'Binding source: ' + source print 'Binding target: ' + element.GetType().Name + '.' + property.PropertyName print 'Binding : ' + Formatter.Format(binding) print 'Is valid : ' + str(IsValidBinding(binding, value.DataItem)) print print 'Checked ' + str(propertyCount) + ' dependency properties. Found ' + str(bindingCount) + ' bindings where ' + str(invalidBindingCount) + ' are invalid'