Categorías destacadas
programacion php    
Artículo
0
¡votar!

 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 
Autor del artículo: Oscar Álvarez Guerra
   
Publicado por:
Angel Carrero
Recomendar
a un amigo
Compartir
en redes
 
Comentarios
 
BBDD
Entornos de desarrollo
Entretenimiento
Herramientas
Internet
Lenguajes de script
Lenguajes imperativos
Lenguajes orientados a objeto
Otros lenguajes
Plataformas
Teoría
Varios
Copyright © 1998-2011 Programación en Castellano. Todos los derechos reservados
Datos legales | Politica de privacidad | Contacte con nosotros | Publicidad

Diseño web y desarrollo web. Un proyecto de los hermanos Carrero.

Red internet:
Juegos gratis | Servidores dedicados
Más internet: Password | Directorio de weblogs | Favicon