ObservableCollection <ProfilerLevel> CreateProfilerLevels(string key, int enabledLevels)
        {
            var levels = new ObservableCollection <ProfilerLevel>();

            for (var i = 0; i < MaxLevels; i++)
            {
                var levelItem = new ProfilerLevel(i)
                {
                    Name = "Level " + (i + 1), Enabled = (enabledLevels & (1 << i)) > 0
                };
                levelItem.PropertyChanged += (sender, args) =>
                {
                    if (args.PropertyName != "Enabled")
                    {
                        return;
                    }

                    var level = (ProfilerLevel)sender;
                    var e     = new ProfilerLevelChangedEventArgs(key, level.LevelId, level.Enabled);
                    OnProfilerLevelChanged(e);
                };
                levels.Add(levelItem);
            }

            return(levels);
        }
        protected virtual void OnProfilerLevelChanged(ProfilerLevelChangedEventArgs e)
        {
            var handler = ProfilerLevelChanged;

            if (handler != null)
            {
                handler(this, e);
            }
        }