/// <summary>
 /// Method to restict the undo redo command from history manager.
 /// </summary>
 /// <param name="parameter"></param>
 private void OnRestrictUndoRedoCommandExecute(object parameter)
 {
     if (this != null)
     {
         if ((bool)parameter)
         {
             NodeVm selectedNode = ((IEnumerable <object>)(this.SelectedItems as SelectorViewModel).Nodes).FirstOrDefault() as NodeVm;
             if (selectedNode != null)
             {
                 selectedNode.CanLogmultipleselect = false;
             }
         }
         else
         {
             NodeVm selectedNode = ((IEnumerable <object>)(this.SelectedItems as SelectorViewModel).Nodes).FirstOrDefault() as NodeVm;
             if (selectedNode != null)
             {
                 selectedNode.CanLogmultipleselect = true;
             }
         }
     }
 }
        public HistoryViewModel()
        {
            //Initialize the nodes and connectors.
            this.Nodes      = new ObservableCollection <NodeVm>();
            this.Connectors = new ConnectorCollection();

            //Initialize the rulers.
            this.HorizontalRuler = new Syncfusion.UI.Xaml.Diagram.Controls.Ruler();
            this.VerticalRuler   = new Syncfusion.UI.Xaml.Diagram.Controls.Ruler()
            {
                Orientation = Orientation.Vertical,
            };

            //Initialize the history manager.
            this.HistoryManager = new HistoryManagerViewModel();

            //Creating the NodeViewModel
            NodeVm redNode = new NodeVm()
            {
                UnitWidth  = 100,
                UnitHeight = 100,
                OffsetX    = 100,
                OffsetY    = 160,
                //Specify shape to the Node from built-in Shape Dictionary
                Shape = App.Current.Resources["Ellipse"],
                Fill  = new SolidColorBrush(Colors.LightPink),
            };

            NodeVm blackNode = new NodeVm()
            {
                UnitWidth  = 100,
                UnitHeight = 100,
                OffsetX    = 250,
                OffsetY    = 160,
                //Specify shape to the Node from built-in Shape Dictionary
                Shape = App.Current.Resources["Ellipse"],
                Fill  = new SolidColorBrush(Colors.LightBlue),
            };

            NodeVm greenNode = new NodeVm()
            {
                UnitWidth  = 100,
                UnitHeight = 100,
                OffsetX    = 400,
                OffsetY    = 160,
                //Specify shape to the Node from built-in Shape Dictionary
                Shape = App.Current.Resources["Ellipse"],
                Fill  = new SolidColorBrush(Colors.LightGray),
            };

            //Add Node to Nodes property of the Diagram
            (this.Nodes as ObservableCollection <NodeVm>).Add(redNode);
            (this.Nodes as ObservableCollection <NodeVm>).Add(blackNode);
            (this.Nodes as ObservableCollection <NodeVm>).Add(greenNode);

            //Enable the undo constraint
            this.Constraints = GraphConstraints.Default | GraphConstraints.Undoable;

            //Initialize the command to execute the undo redo values
            ChangeNodeColorCommand  = new Command(OnChangeNodeColorCommandExecute);
            UndoCommand             = new Command(OnUndoCommandExecute);
            RedoCommand             = new Command(OnRedoCommandExecute);
            RestrictUndoRedoCommand = new Command(OnRestrictUndoRedoCommandExecute);

            //Initialize the selected items.
            this.SelectedItems = new SelectorViewModel()
            {
            };

            //Restrict the quick command and rotator command.
            (this.SelectedItems as SelectorViewModel).SelectorConstraints &= ~(SelectorConstraints.QuickCommands | SelectorConstraints.Rotator);
        }