private static object RaiseInternal(
            RelayConversionHandler handler,
            string eventName,
            object value,
            Type targetType,
            object parameter,
            CultureInfo culture)
        {
            if (handler != null)
            {
                return(handler(value, targetType, parameter, culture));
            }

            if (WpfFactotum.IsInDesignMode())
            {
                return(DependencyProperty.UnsetValue);
            }

            throw new NotSupportedException(
                      string.Format(CultureInfo.InvariantCulture, "The event '{0}' is not being handled.", eventName));
        }
        public AnalysisControlViewModel()
        {
            _projectService = WpfFactotum.IsInDesignMode()
                ? null
                : VuGenServiceManager.GetService <IVuGenProjectService>().EnsureNotNull();

            _transactionInfosInternal = new List <TransactionInfo>();
            Transactions = new CollectionView(_transactionInfosInternal);

            AnalysisTypes       = CreateCollectionViewForEnumeration <AnalysisType>();
            ScoreUtilityTypes   = CreateCollectionViewForEnumeration <ScoreUtilityType>();
            PageSpeedStrategies = CreateCollectionViewForEnumeration <PageSpeedStrategy>();

            AnalyzeCommand = new AsyncRelayCommand(ExecuteAnalyzeCommand, CanExecuteAnalyzeCommand);

            Transactions.CurrentChanged        += Transactions_CurrentChanged;
            AnalysisTypes.CurrentChanged       += AnalysisTypes_CurrentChanged;
            ScoreUtilityTypes.CurrentChanged   += ScoreUtilityTypes_CurrentChanged;
            PageSpeedStrategies.CurrentChanged += PageSpeedStrategies_CurrentChanged;

            if (_projectService != null)
            {
                _projectService.LastReplayedRunChanged += (sender, args) => RefreshTransactions();
                _projectService.ActiveScriptChanged    += (sender, args) => RefreshTransactions();
                _projectService.ScriptOpened           += (sender, args) => RefreshTransactions();
                _projectService.ScriptClosed           += (sender, args) => RefreshTransactions();
                _projectService.SolutionClosed         += (sender, args) => RefreshTransactions();
            }

            RefreshTransactions();

            CoerceValue(SelectedTransactionProperty);
            CoerceValue(SelectedAnalysisTypeProperty);
            CoerceValue(SelectedScoreUtilityTypeProperty);
            CoerceValue(SelectedPageSpeedStrategyProperty);
        }