diff Messaging/Common/Xaml/BindingErrorTraceListener.cs @ 27:96fdf58e05b4

Server working with sockets and rabbitmq
author adminsh@apollo
date Wed, 21 Mar 2012 19:00:59 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Messaging/Common/Xaml/BindingErrorTraceListener.cs	Wed Mar 21 19:00:59 2012 +0000
@@ -0,0 +1,69 @@
+// http://www.switchonthecode.com/tutorials/wpf-snippet-detecting-binding-errors
+
+using System.Diagnostics;
+using System.Text;
+using System.Windows;
+
+namespace Common.Xaml
+{
+    public class BindingErrorTraceListener : DefaultTraceListener
+    {
+        private static BindingErrorTraceListener _listener;
+
+
+        private readonly StringBuilder _message = new StringBuilder();
+
+        private BindingErrorTraceListener()
+        {
+        }
+
+        public override void Write(string message)
+        {
+            _message.Append(message);
+        }
+
+        public override void WriteLine(string message)
+        {
+            _message.Append(message);
+
+            var final = _message.ToString();
+            _message.Length = 0;
+
+            MessageBox.Show(final,
+              "Binding Error",
+              MessageBoxButton.OK,
+              MessageBoxImage.Error);
+        }
+
+        public static void CloseTrace()
+        {
+            if (_listener == null)
+            {
+                return;
+            }
+
+            _listener.Flush();
+            _listener.Close();
+            PresentationTraceSources.DataBindingSource.Listeners.Remove(_listener);
+            _listener = null;
+        }
+
+        [Conditional("DEBUG")]
+        public static void SetTrace()
+        {
+            SetTrace(SourceLevels.Error, TraceOptions.None);
+        }
+
+        public static void SetTrace(SourceLevels level, TraceOptions options)
+        {
+            if (_listener == null)
+            {
+                _listener = new BindingErrorTraceListener();
+                PresentationTraceSources.DataBindingSource.Listeners.Add(_listener);
+            }
+
+            _listener.TraceOutputOptions = options;
+            PresentationTraceSources.DataBindingSource.Switch.Level = level;
+        }
+    }
+}