Debugeando los Binding de WPF - Blog de Oskar Alvarez

Debugeando los Binding de WPF

Cuando desarrollamos en WPF, los binding son indispensables y a veces tenemos problemas con ellos que no somos capaces de detectar y deseamos con todo el alma poder poner un breakpoint y tener la posibilidad de debugear con todas las herramientas que nos da Visual Studio.

Pero esto no es posible y para poder ver los errores de binding y poderlos analizar tenemos diferentes alternativas

Output window

En la ventana Output de Visual Studio donde se displayan todos los mensajes, cuando se produce un error de binding se muestra en esta ventana el error como por ejemplo

System.Windows.Data Error: 35 : BindingExpression path error: 'Password1' property not found on 'object' ''LoginViewModel' (HashCode=28756230)'. BindingExpression:Path=Password1; DataItem='LoginViewModel' (HashCode=28756230); target element is 'TextBox' (Name='Password'); target property is 'Text' (type 'String')

 

Usar un converter

Si con el mensaje no conseguimos ver el problema una opción es crear un converter y cambiar el bindign al converter. En el converter si podemos poner un punto de ruptura y ver el valor que entra al Binding

 

Crear una Dependency Property

Otra opción es crear una DependencyProperty y poner un punto de ruptura

 

TraceLevel

PresentationTraceSources.TraceLevel es una clase que te permite enviar a la ventana de Output mucha mas información del DataBinding, podemos monitorizar todos los pasos que se producen en un Binding, para habilitarlo tenemos que añadir el namespace System.Diagnostics y en el binding añadir PresentationTraceSources.TraceLevel=High. Esta opción aparece a partir de la versión 3.5

 

<Window x:Class="DebugBindings.Window1"... xmlns:trace="clr-namespace:System.Diagnostics;assembly=WindowsBase">
<StackPanel>
<TextBox Text="{Binding ElementName=slider, Path=Value, Mode=OneWay, trace:PresentationTraceSources.TraceLevel=High}" Height="30" Width="100" Margin="10"/>
<Slider Minimum="0" Maximum="100" Value="20" Margin="10" x:Name="slider" />
StackPanel>
Window>

En la ventana de Output aparecerá

Created BindingExpression (hash=17654054) for Binding (hash=44624228)
Path: 'Value'
BindingExpression (hash=17654054): Default update trigger resolved to LostFocus
BindingExpression (hash=17654054): Attach to System.Windows.Controls.TextBox.Text (hash=52727599)
BindingExpression (hash=17654054): Resolving source
BindingExpression (hash=17654054): Found data context element: (OK)
Lookup name slider: queried TextBox (hash=52727599)
BindingExpression (hash=17654054): Resolve source deferred

BindingExpression (hash=17654054): Resolving source
BindingExpression (hash=17654054): Found data context element: (OK)
Lookup name slider: queried TextBox (hash=52727599)
BindingExpression (hash=17654054): Activate with root item Slider (hash=54371668)
BindingExpression (hash=17654054): At level 0 - for Slider.Value found accessor DependencyProperty(Value)
BindingExpression (hash=17654054): Replace item at level 0 with Slider (hash=54371668), using accessor DependencyProperty(Value)
BindingExpression (hash=17654054): GetValue at level 0 from Slider (hash=54371668) using DependencyProperty(Value): '20'
BindingExpression (hash=17654054): TransferValue - got raw value '20'
BindingExpression (hash=17654054): TransferValue - implicit converter produced '20'
BindingExpression (hash=17654054): TransferValue - using final value '20'

If I now enter text in the TextBox, I can check the Output Window to confirm that the binding was indeed broken!

BindingExpression (hash=17654054): Deactivate
BindingExpression (hash=17654054): Replace item at level 0 with {NullDataItem}
BindingExpression (hash=17654054): Detach

Published 22/7/2009 7:17 por Oskar Alvarez
Archivado en:
Comparte este post:
http://geeks.ms/blogs/oalvarez/archive/2009/07/22/debugeando-los-binding-de-wpf.aspx

Comentarios

# Debugeando los Binding de WPF

Cuando desarrollamos en WPF, los binding son indispensables y a veces tenemos problemas con ellos que

Wednesday, July 22, 2009 8:27 AM por .NET con oskar

# re: Debugeando los Binding de WPF

Muy interesante para ilustrar el proceso interno de busqueda, validación y conversion de valores en el proceso de binding.

Enhorabuena.

Wednesday, July 22, 2009 11:32 AM por Cristian Manteiga

# Debug DataBinding con PresentationTraceSources.TraceLevel en VS2010

Si recordáis mi articulo de geeks.ms/.../debugeando-los-binding

Sunday, January 02, 2011 3:58 PM por Blog de Oskar Alvarez

# Un nivel mas a la hora de debug en Bindings de WPF

Hola en el articulo Debugeando los Binding de WPF , vimos varias opciones a la hora de debugear los bindings

Friday, January 28, 2011 11:17 AM por Blog de Oskar Alvarez