public FunctionEditorDialogViewModel(IVplServiceContext context, Function function, Action<FunctionMetadata> saveAction, ITextEditService textEditService, string displayName) { if (context == null) throw new ArgumentNullException(nameof(context)); if (function == null) throw new ArgumentNullException(nameof(function)); if (saveAction == null) throw new ArgumentNullException(nameof(saveAction)); if (textEditService == null) throw new ArgumentNullException(nameof(textEditService)); _context = context; _function = function; _saveAction = saveAction; _textEditService = textEditService; _displayName = displayName; //Commands RunCommand = new RelayCommand(Run, CanRun); StopCommand = new RelayCommand(Stop, CanStop); OkCommand = new RelayCommand(Ok, CanOk); CloseCommand = new RelayCommand(Cancel, CanCancel); SaveCommand = new RelayCommand(Apply, CanOk); AddVariableCommand = new RelayCommand(AddVariable, CanAddVariable); PasteCommand = new RelayCommand(Paste, CanPaste); SelectReturnTypeCommand = new RelayCommand(SelectReturnType); ClearReturnTypeCommand = new RelayCommand(() => ClearReturnType(), CanClearReturnType); CheckForErrorsCommand = new RelayCommand(CheckForErrors); ResetZoomCommand = new RelayCommand(ResetZoom); //Create the toolbox _tools = new ToolsViewModel<IElementFactory>(context.ElementFactoryManager.Factories.Where(f => f.ShowInToolbox)); //Select a default type SelectedType = context.Types.FirstOrDefault(t => t.Id == VplTypeId.Float); function.PropertyChanged += Function_PropertyChanged; //Save the initial state function.SaveUndoState(); }