protected override void OnPreviewKeyDown(KeyEventArgs e)
        {
            base.OnPreviewKeyDown(e);

            DataGridCell senderCell = e.OriginalSource as DataGridCell;
            bool         ctrlDown   = Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl);

            if (e.Key == Key.Return)
            {
                if (senderCell != null && !senderCell.IsEditing)
                {
                    // Enter edit mode if current cell is not in edit mode
                    senderCell.Focus();
                    this.BeginEdit();
                    e.Handled = true;
                }
            }
            else if (e.Key == Key.Space)
            {
                if (senderCell != null && !senderCell.IsEditing)
                {
                    object item = senderCell.DataContext;

                    // In some cases senderCell is not selected. This can happen after multi selection over all items.
                    if (!senderCell.IsSelected)
                    {
                        item = SelectedItem; // simply use first selected item
                    }

                    ToggleEnabledForItem(item);
                    e.Handled = true;
                }
            }
            else if (ctrlDown && e.Key == Key.Up)
            {
                if (MoveUpCommand != null && MoveUpCommand.CanExecute(null))
                {
                    var focusedCellItem = (Keyboard.FocusedElement as DataGridCell)?.DataContext;

                    MoveUpCommand.Execute(null);

                    // DataGrid loses keyboard focus after moving items
                    FocusCellAfterDelay(focusedCellItem);
                }
                e.Handled = true;
            }
            else if (ctrlDown && e.Key == Key.Down)
            {
                if (MoveDownCommand != null && MoveDownCommand.CanExecute(null))
                {
                    var focusedCellItem = (Keyboard.FocusedElement as DataGridCell)?.DataContext;

                    MoveDownCommand.Execute(null);

                    // DataGrid loses keyboard focus after moving items
                    FocusCellAfterDelay(focusedCellItem);
                }
                e.Handled = true;
            }
        }
        /// <summary>
        /// Updates operation collection.
        /// </summary>
        private void UpdateOperations()
        {
            this.contextMenuOperations = new Collection <MenuItemViewModel>();

            if (this.SelectedItems.Count == 1)
            {
                SerializedDomainClassViewModel classViewModel = this.SelectedItems[0] as SerializedDomainClassViewModel;
                if (classViewModel != null)
                {
                    if (classViewModel.Parent != null)
                    {
                        MenuItemViewModel mv = new MenuItemViewModel(this.ViewModelStore, "Select Relationship");
                        mv.Command = SelectRelationshipCommand;
                        this.contextMenuOperations.Add(mv);
                    }
                }

                SerializedReferenceRelationshipViewModel refRelViewModel = this.SelectedItems[0] as SerializedReferenceRelationshipViewModel;
                if (refRelViewModel != null)
                {
                    if (!refRelViewModel.IsInFullSerialization)
                    {
                        MenuItemViewModel mv = new MenuItemViewModel(this.ViewModelStore, "Select Relationship");
                        mv.Command = SelectRelationshipCommand;
                        this.contextMenuOperations.Add(mv);
                    }
                }
            }

            if (this.SelectedItems.Count > 0)
            {
                AddSeparator();

                MenuItemViewModel mvMoveUp = new MenuItemViewModel(this.ViewModelStore, "Move up", "pack://application:,,,/Tum.PDE.LanguageDSL.Visualization;component/Resources/Images/Up-16.png");
                mvMoveUp.Command = MoveUpCommand;
                if (!MoveUpCommand.CanExecute())
                {
                    mvMoveUp.IsEnabled = false;
                }
                this.contextMenuOperations.Add(mvMoveUp);

                MenuItemViewModel mvMoveDown = new MenuItemViewModel(this.ViewModelStore, "Move down", "pack://application:,,,/Tum.PDE.LanguageDSL.Visualization;component/Resources/Images/Down-16.png");
                mvMoveDown.Command = MoveDownCommand;
                if (!MoveDownCommand.CanExecute())
                {
                    mvMoveDown.IsEnabled = false;
                }
                this.contextMenuOperations.Add(mvMoveDown);
            }

            OnPropertyChanged("Operations");
        }