2010-11-19 21 views

Répondre

39

Vous pouvez accrocher dans la collection PresentationTraceSources avec votre propre auditeur:

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); 
    } 
} 

puis le brancher dans le code-behind

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

Voici le XAML avec une erreur de liaison

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

Est-ce que ce travail que lorsque je lance mon application au sein du studio visuel? Que diriez-vous de publier mon application sur un partage et de lancer le wpf exe à partir de là? – Jithu

8

J'ai implémenté une solution très similaire à celle proposée par Dean Chalk:

  1. Inférée a TraceListener qui jette au lieu de l'exploitation forestière
  2. a ajouté que l'auditeur à PresentationTraceSources.DataBindingSource

S'il vous plaît voir le complete solution on GitHub, il comprend une application de démonstration et un projet de test unitaire.

Exception in Visual Studio

+1

Cool. Vous pouvez le transformer en paquet NuGet. –

+4

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