== Debugging == * Enable WPF debug output. In Visual Studio, Options > Debugging > Output Window > WPF Trace Settings > Data Binding > All. * Add a high TraceLevel to your binding: System.Diagnostics.PresentationTraceSources.SetTraceLevel(NewBinding, System.Diagnostics.PresentationTraceLevel.High); * Run application, and review log in "Output" tab in Visual Studio. * Add ''System.Diagnostics'' entry to ''app.exe.config''. See: * [[swdev:dotnet:debugging|Debugging for .NET]] * [[http://www.thejoyofcode.com/System.Diagnostics_hidden_SourceLevels.aspx|The Joy of Code: System.Diagnostics Hidden SourceLevels]] * [[http://msdn.microsoft.com/en-us/library/aa345169.aspx|MSDN: PresentationTraceSources Class]] * [[http://msdn.microsoft.com/en-us/library/system.diagnostics.presentationtracesources.settracelevel.aspx|MSDN: SetTraceLevels]] * [[http://msdn.microsoft.com/en-us/library/6w20x90k.aspx|MSDN: EventLog.WriteEntry method]] * [[http://stackoverflow.com/questions/4026543/is-there-a-good-tool-for-debugging-xamls-databinding-behavior-errors-at-runtim|Tools for Debugging Data Binding at runtime]] * [[http://bea.stollnitz.com/blog/?p=52|Bea Stollnitz: How can I debug WPF bindings?]] == Using System.Diagnostics == === Configuration File === Add the following to the ''//app//.exe.config'' file (must reside in the same folder and the ''//app//.exe''): ... The ''SourceLevels'' used by the ''SourceSwitch'' (''//app//.exe.config'' configuration file) could be any of these: public enum SourceLevels { All = -1, Off = 0, Critical = 1, Error = 3, Warning = 7, Information = 15, Verbose = 31, ActivityTracing = 65280, } The listener could also be: === Writing Events === To write to the event log: System.Diagnostics.Trace.TraceInformation("Some operation here: Hello World"); System.Diagnostics.Trace.TraceError("Error: Something failed here."); Alternatively, and more flexible: TraceSource srcMyApp = new TraceSource("srcMyAppDebug"); srcMyApp.TraceInformation("Some operation here: Hello World"); srcMyApp.TraceEvent(TraceEventType.Error, 0, "Error: Something failed here."); The ''TraceEventType'' could be any of these: public enum TraceEventType { Critical = 1, Error = 2, Warning = 4, Information = 8, Verbose = 16, Start = 256, Stop = 512, Suspend = 1024, Resume = 2048, Transfer = 4096, } Another example: using System.Diagnostics; private void WriteToEventLog(string message) { string cs = "srcMyApp"; EventLog elog = new EventLog(); if (!EventLog.SourceExists(cs)) { EventLog.CreateEventSource(cs, cs); } elog.Source = cs; elog.EnableRaisingEvents = true; elog.WriteEntry(message); } Another example (by Microsoft): using System; using System.Diagnostics; using System.Threading; class MySample{ public static void Main(){ // Create the source, if it does not already exist. if(!EventLog.SourceExists("MySource")) { //An event log source should not be created and immediately used. //There is a latency time to enable the source, it should be created //prior to executing the application that uses the source. //Execute this sample a second time to use the new source. EventLog.CreateEventSource("MySource", "MyNewLog"); Console.WriteLine("CreatedEventSource"); Console.WriteLine("Exiting, execute the application a second time to use the source."); // The source is created. Exit the application to allow it to be registered. return; } // Create an EventLog instance and assign its source. EventLog myLog = new EventLog(); myLog.Source = "MySource"; // Write an informational entry to the event log. myLog.WriteEntry("Writing to event log."); } }