2010-11-19 9 views

Respuesta

39

Se podría enganchar en la colección PresentationTraceSources con su propio oyente:

public class BindingErrorListener : TraceListener 
{ 
    private Action<string> logAction; 
    public static void Listen(Action<string> logAction) 
    { 
     PresentationTraceSources.DataBindingSource.Listeners 
      .Add(new BindingErrorListener() { logAction = logAction }); 
    } 
    public override void Write(string message) { } 
    public override void WriteLine(string message) 
    { 
     logAction(message); 
    } 
} 

y luego conectarlo en el código subyacente

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     BindingErrorListener.Listen(m => MessageBox.Show(m)); 
     InitializeComponent(); 
     DataContext = new string[] { "hello" }; 
    } 
} 

Aquí está el XAML con un error de unión

<Grid> 
    <TextBlock Text="{Binding BadBinding}" /> 
</Grid> 
+1

hace este trabajo sólo cuando ejecuto mi aplicación dentro de Visual Studio? ¿Qué tal si publico mi aplicación en un recurso compartido y ejecuto el archivo wpf exe desde allí? – Jithu

8

Implementé una solución muy similar a la propuesta por Dean Chalk:

  1. derivó una TraceListener que lanza en lugar de entrar
  2. añadió que escucha a PresentationTraceSources.DataBindingSource

Por favor ver el complete solution on GitHub, que incluye una aplicación de demostración y un proyecto de prueba unitaria.

Exception in Visual Studio

+1

Cool. Podrías convertirlo en el paquete NuGet. –

+4

@ RobertVažan ¡Hecho! https://www.nuget.org/packages/WpfBindingErrors/ –

Cuestiones relacionadas