2011-02-01 5 views
8

데이터 바인딩 된 프로퍼티 게터 (및 세터가 던져진 예외를 잡기위한 애플리케이션 차원의 방법을 찾고 있는데 어려움없이 그렇게 할 수 있습니다. 이러한 이벤트의WPF Databinding : 프로퍼티 게터에 의해 던져지는 예외 캐치

없음 게터에 의해 던져진 예외를 잡을 것 :

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

또 다른 아이디어는 this thread에 설명 된대로 UpdateSourceExceptionFilter와 사용자 정의 바인딩 클래스를 사용하는 것입니다. 불행하게도이 메소드는 getter가 아닌 속성 setter에서만 예외를 catch합니다.

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

이 방법은 내가 원하는 기본적으로 어떻게 표시 않습니다

내가 본 마지막 옵션은 PresentationTraceSources 추적 수신기를 사용하는 것입니다. 불행하게도, 그것은 단지 문자열을 제공하고 예외는 아니며, 실제 오류를 처리하기 위해 약간의 파싱 작업을 수행해야한다는 것을 의미합니다.

TraceListener 메서드가 결국 작동하지만 약간은 이상한 것처럼 보입니다. 내가 누락 된 다른 옵션이 있습니까? 아니면 TraceListener를 사용하고 있습니까?

+2

나는 이것을위한 대답을보고 싶다 –

답변

1

이 문제에 대한 AOP (Aspect Oriented Programming) 방식을 제안합니다. getter를 원하는대로,이 경우에는 try/catch 및 logging과 함께 컴파일 타임에 코드를 삽입 할 수 있습니다. 내가 함께 일한 유일한 것은 PostSharp 라오스, PostSharp 무료 버전 http://www.sharpcrafters.com입니다.

나는 이것이 시작하기 좋은 곳이라고 생각한다. 예를 들어, http://www.richard-banks.org/2009/02/aspect-oriented-programming.html, 그는 자동으로 NotifyPropertyChanged를 호출하는 기능을 가진 setter를 래핑한다. 거기에 몇 가지 다른 AOP 프로젝트를 사용할 수도 있지만 사용하지 않았습니다. 다음은 좋은 목록입니다 : http://www.bodden.de/tools/aop-dot-net. 나는 위브 기반 접근법을 제안 할 것이다.

+0

코멘트 주셔서 감사합니다. 나는 이것이 지금까지 본 최선의 제안이라고 생각한다. –

+0

@ MartyDill 그래서 이것을 작동 가능한 솔루션으로 변환 할 수 있었습니까? 이 경험을 게시 할 수 있다면 좋을 것입니다. – akjoshi