public ReadOnlyConditionGroup(AbstractConditionGroup sourceGroup)
            : base(sourceGroup)
        {
            this.sourceGroup = sourceGroup;

            If = new ReadOnlyExpressionCondition(sourceGroup.If);

            sourceGroup.PropertyChanged += OnSourcePropertyChanged;
            if (null != sourceGroup.Else)
            {
                Else = new ReadOnlyBasicCondition(sourceGroup.Else);
            }
        }
        protected AbstractConditionGroup(AbstractConditionGroup sourceGroup = null)
            : base(sourceGroup)
        {
            this.sourceGroup = sourceGroup;

            AddElseIfCommand = new DelegateCommand((parameter) => IsEditable,
            (parameter) =>
            {
                if (IsEditable)
                {
                    var condition = new ExpressionCondition();
                    AddStatement(condition);

                    Workspace.Instance.CommandHistory.Log(
                        "add else if",
                        () => AddStatement(condition),
                        () => RemoveStatement(condition)
                    );
                }
            });

            AddElseCommand = new DelegateCommand((parameter) => IsEditable && null == Else,
            (parameter) =>
            {
                if (IsEditable && null == Else)
                {
                    var condition = new BasicCondition();
                    Else = condition;

                    Workspace.Instance.CommandHistory.Log(
                        "add else",
                        () => Else = condition,
                        () => Else = null
                    );
                }
            });
        }