private void AddSubstitutionCommandExecute([NotNull] object obj)
        {
            Assert.ArgumentNotNull(obj, "obj");

            var substitutionToAdd      = new SubstitutionViewModel(Groups, Groups.First(g => g.IsBuildIn), new Substitution());
            var substitutionEditDialog = new SubstitutionEditDialog {
                DataContext = substitutionToAdd, Owner = (Window)obj
            };

            substitutionEditDialog.Show();
            substitutionEditDialog.Closed += (s, e) =>
            {
                if (substitutionEditDialog.Save)
                {
                    substitutionToAdd.SubstitutionGroup.AddSubstitution(substitutionToAdd);
                }
            };
        }
        private void EditSubstitutionCommandExecute([NotNull] object obj)
        {
            Assert.ArgumentNotNull(obj, "obj");

            if (SelectedSubstitution == null)
            {
                return;
            }

            var originalSubstitution   = SelectedSubstitution;
            var substitutionEditDialog = new SubstitutionEditDialog {
                DataContext = originalSubstitution.Clone(), Owner = (Window)obj
            };

            substitutionEditDialog.Show();
            substitutionEditDialog.Closed += (object sender, System.EventArgs e) =>
            {
                if (!substitutionEditDialog.Save)
                {
                    return;
                }

                var changedSubstitution = (SubstitutionViewModel)substitutionEditDialog.DataContext;
                if (originalSubstitution.SubstitutionGroup == changedSubstitution.SubstitutionGroup)
                {
                    var originalIndex = originalSubstitution.SubstitutionGroup.Substitutions.IndexOf(originalSubstitution);
                    originalSubstitution.SubstitutionGroup.InsertSubstitution(originalIndex, (SubstitutionViewModel)substitutionEditDialog.DataContext);
                }
                else
                {
                    changedSubstitution.SubstitutionGroup.AddSubstitution(changedSubstitution);
                }

                originalSubstitution.SubstitutionGroup.RemoveSubstitution(originalSubstitution);
                SelectedSubstitution = (SubstitutionViewModel)substitutionEditDialog.DataContext;
            };
        }