Mercurial > silverbladetech
diff Glimpse/Glimpse Controls/BrokenBindingsViewer.xaml.vb @ 59:3591c26bd63e
MVVMLight added
author | Steven Hollidge <stevenhollidge@hotmail.com> |
---|---|
date | Sat, 21 Apr 2012 19:20:28 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Glimpse/Glimpse Controls/BrokenBindingsViewer.xaml.vb Sat Apr 21 19:20:28 2012 +0100 @@ -0,0 +1,79 @@ +Imports System.Reflection +Imports System.Windows.Data +Partial Public Class BrokenBindingsViewer + Inherits UserControl + + Public Sub New() + InitializeComponent() + End Sub + + Private Sub BrokenBindings_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded + Me.icBrokenBindings.Items.Clear() + LoadBrokenBindings(GlimpseService.CreateInstance.RootVisual) + End Sub + + Private Sub LoadBrokenBindings(ByVal uie As UIElement) + + Dim fwe As FrameworkElement = TryCast(uie, FrameworkElement) + + If fwe IsNot Nothing Then + + For Each fi As FieldInfo In fwe.GetType.GetFields(BindingFlags.Public Or BindingFlags.FlattenHierarchy Or BindingFlags.Instance Or BindingFlags.Static) + + If fi.FieldType Is GetType(DependencyProperty) Then + + Dim be As BindingExpression = fwe.GetBindingExpression(DirectCast(fi.GetValue(Nothing), DependencyProperty)) + + If be IsNot Nothing AndAlso be.ParentBinding.Source Is Nothing AndAlso be.ParentBinding.RelativeSource Is Nothing Then + + Dim bolIsInherited As Boolean = False + + If fwe.DataContext IsNot Nothing AndAlso Not String.IsNullOrEmpty(be.ParentBinding.Path.Path) Then + + For Each p As PropertyInfo In fwe.DataContext.GetType.GetProperties(BindingFlags.Public Or BindingFlags.FlattenHierarchy Or BindingFlags.Static Or BindingFlags.Instance) + + If String.Compare(p.Name, be.ParentBinding.Path.Path) = 0 Then + bolIsInherited = True + Exit For + End If + + Next + + End If + + If bolIsInherited Then + Exit For + End If + + 'this code handles empty bindings on the Button controls + 'I'll have to look into why the Button has an empty or unresolved binding + If fwe.Name = "" AndAlso fwe.GetType.Name = "TextBlock" AndAlso fi.Name = "TextProperty" AndAlso be.ParentBinding.Path.Path = "" Then + Exit For + End If + + Dim objBrokenBinding As New BrokenBinding(fwe.Name, fwe.GetType.Name, fi.Name, be.ParentBinding.Path.Path) + Me.icBrokenBindings.Items.Add(objBrokenBinding) + System.Diagnostics.Debug.WriteLine(String.Format("Broken Binding - ", objBrokenBinding.ToString)) + End If + + End If + + Next + + Dim children As Integer = VisualTreeHelper.GetChildrenCount(fwe) + + For intX As Integer = 0 To children - 1 + + Dim child As FrameworkElement = TryCast(VisualTreeHelper.GetChild(fwe, intX), FrameworkElement) + + If child IsNot Nothing Then + LoadBrokenBindings(child) + End If + + Next + + End If + + End Sub + +End Class