2011-02-01 17 views
8

Estoy buscando un método de captura de excepciones por parte de get getters (y setters) de propiedades databound, pero eso es posible sin demasiada dificultad.WPF Databinding: capturas de excepciones lanzadas por getters de propiedad

Ninguno de estos eventos se pondrá al día excepciones lanzadas por captadores:

AppDomain.CurrentDomain.UnhandledException 
Application.Current.DispatcherUnhandledException 
Application.Current.Dispatcher.UnhandledException 

Otra idea es utilizar una clase personalizada de unión con un UpdateSourceExceptionFilter como se describe en this thread. Lamentablemente, este método solo capta excepciones en los generadores de propiedades, no en los getters.

La última opción que he visto es utilizar un rastro PresentationTraceSources oyente:

PresentationTraceSources.Refresh(); 
PresentationTraceSources.DataBindingSource.Listeners.Add(new PresentationLoggingTraceListener()); 
PresentationTraceSources.DataBindingSource.Switch.Level = SourceLevels.Error; 

Este método sí parece hacer básicamente lo que quiero. Desafortunadamente, solo me da una cadena, no una excepción, lo que significa que tendría que hacer un poco de análisis para llegar al error real.

El método TraceListener probablemente funcione al final, pero parece un poco hackish. ¿Hay alguna otra opción que me falta, o estoy bastante atrapado con el TraceListener?

+2

Me gustaría ver una respuesta para este –

Respuesta

1

Sugeriría un enfoque de Programación Orientada a Aspectos (AOP) a este problema. Te permitiría inyectar código en tiempo de compilación que envuelva tu getter con lo que desees, en este caso un try/catch y logging. El único con el que he trabajado es PostSharp Laos, la versión gratuita de PostSharp http://www.sharpcrafters.com.

Creo que este es un buen lugar para comenzar, http://www.richard-banks.org/2009/02/aspect-oriented-programming.html, en ese ejemplo él envuelve setters con la capacidad de llamar automáticamente NotifyPropertyChanged. Hay varios otros proyectos de AOP que también podrías usar, pero no los he usado. Aquí hay una buena lista: http://www.bodden.de/tools/aop-dot-net. Yo sugeriría enfoques basados ​​en el tejido.

+0

Gracias por el comentario. Creo que esta es la mejor sugerencia que he visto hasta ahora. –

+0

@MartyDill Entonces, ¿fue capaz de convertir esto en una solución de trabajo? Será genial si puedes publicar tu experiencia con esto. – akjoshi

Cuestiones relacionadas