view Messaging/Common/Xaml/BindingErrorTraceListener.cs @ 31:7d9de5746f18

Working version
author adminsh@apollo
date Thu, 22 Mar 2012 08:09:41 +0000
parents 96fdf58e05b4
children
line wrap: on
line source

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