public EasyProjectMultipleOptionsTemplateViewModel(
            IOptionsViewModelParent parent,
            IServerSettingsTemplateViewModel serverSettingsViewModel,
            IOptionTasks optionTasks,
            OptionsModel prototypeModel,
            IViewOptions viewOptions)
        {
            _parent = parent;
            if (parent == null)
            {
                throw new ArgumentNullException(nameof(parent));
            }
            if (optionTasks == null)
            {
                throw new ArgumentNullException(nameof(optionTasks));
            }
            if (prototypeModel == null)
            {
                throw new ArgumentNullException(nameof(prototypeModel));
            }
            if (viewOptions == null)
            {
                throw new ArgumentNullException(nameof(viewOptions));
            }

            _prototypeModel = prototypeModel;
            ViewOptions     = viewOptions;


            _discoverResourcesCommand = new DelegateCommandWithoutCanExecuteDelegation(_ =>
            {
                ComponentContainer.EnsureSynchronizationContext();
                DiscoverResourcesAsync();
            });

            _mergeResourcesCommand = new DelegateCommandWithoutCanExecuteDelegation(_ =>
            {
                ComponentContainer.EnsureSynchronizationContext();
                MergeResourcesAsync();
            });

            SelectFolderCommand = new DelegateCommand(_ => SelectFolder());

            _networkSettingsViewModel = new NetworkSettingsViewModel(_prototypeModel);
            Items = new[] { _networkSettingsViewModel };

            _serverSettingsViewModel = serverSettingsViewModel;
            _optionTasks             = optionTasks;

            var folder = _optionTasks.GetDefaultCalendarFolderOrNull();

            if (folder != null)
            {
                _selectedFolder    = folder;
                SelectedFolderName = folder.Name;
            }

            RegisterPropertyChangePropagation(_prototypeModel, nameof(_prototypeModel.Name), nameof(Name));
        }
        public MultipleOptionsTemplateViewModel(
            IOptionsViewModelParent parent,
            IServerSettingsTemplateViewModel serverSettingsViewModel,
            IOptionTasks optionTasks,
            OptionsModel prototypeModel,
            IViewOptions viewOptions)

        {
            _parent = parent;
            if (parent == null)
            {
                throw new ArgumentNullException(nameof(parent));
            }

            if (optionTasks == null)
            {
                throw new ArgumentNullException(nameof(optionTasks));
            }
            if (prototypeModel == null)
            {
                throw new ArgumentNullException(nameof(prototypeModel));
            }
            if (viewOptions == null)
            {
                throw new ArgumentNullException(nameof(viewOptions));
            }

            ViewOptions = viewOptions;

            _prototypeModel = prototypeModel;

            _discoverResourcesCommand = new DelegateCommandWithoutCanExecuteDelegation(_ =>
            {
                ComponentContainer.EnsureSynchronizationContext();
                DiscoverResourcesAsync();
            });

            _getAccountSettingsCommand = new DelegateCommandWithoutCanExecuteDelegation(_ =>
            {
                ComponentContainer.EnsureSynchronizationContext();
                GetAccountSettings();
            });

            _networkSettingsViewModel = new NetworkSettingsViewModel(_prototypeModel);

            Items = new[] { _networkSettingsViewModel };

            _serverSettingsViewModel = serverSettingsViewModel;
            _optionTasks             = optionTasks;

            RegisterPropertyChangePropagation(_prototypeModel, nameof(_prototypeModel.Name), nameof(Name));
        }
        public MultipleOptionsTemplateViewModel(
            NameSpace session,
            IOptionsViewModelParent parent,
            GeneralOptions generalOptions,
            IServerSettingsTemplateViewModel serverSettingsViewModel,
            ProfileType profileType)

        {
            _parent  = parent;
            _session = session;
            if (session == null)
            {
                throw new ArgumentNullException(nameof(session));
            }
            if (parent == null)
            {
                throw new ArgumentNullException(nameof(parent));
            }
            if (generalOptions == null)
            {
                throw new ArgumentNullException(nameof(generalOptions));
            }

            _discoverResourcesCommand = new DelegateCommandWithoutCanExecuteDelegation(_ =>
            {
                ComponentContainer.EnsureSynchronizationContext();
                DiscoverResourcesAsync();
            });

            _getAccountSettingsCommand = new DelegateCommandWithoutCanExecuteDelegation(_ =>
            {
                ComponentContainer.EnsureSynchronizationContext();
                GetAccountSettings();
            });

            _networkSettingsViewModel = new NetworkSettingsViewModel();

            SubOptions = new[] { _networkSettingsViewModel };

            _serverSettingsViewModel = serverSettingsViewModel;
            _profileType             = profileType;
            _generalOptions          = generalOptions;
        }
    public MultipleOptionsTemplateViewModel (
        IOptionsViewModelParent parent,
        GeneralOptions generalOptions,
        IServerSettingsTemplateViewModel serverSettingsViewModel,
        ProfileType profileType,
        IOptionTasks optionTasks)

    {
      _parent = parent;
      if (parent == null)
        throw new ArgumentNullException (nameof (parent));
      if (generalOptions == null)
        throw new ArgumentNullException (nameof (generalOptions));
      if (optionTasks == null) throw new ArgumentNullException(nameof(optionTasks));

      _discoverResourcesCommand = new DelegateCommandWithoutCanExecuteDelegation (_ =>
      {
        ComponentContainer.EnsureSynchronizationContext();
        DiscoverResourcesAsync();
      });

      _getAccountSettingsCommand = new DelegateCommandWithoutCanExecuteDelegation(_ =>
      {
        ComponentContainer.EnsureSynchronizationContext();
        GetAccountSettings();
      });

      _networkSettingsViewModel = new NetworkSettingsViewModel();

      Items = new[] { _networkSettingsViewModel };

      _serverSettingsViewModel = serverSettingsViewModel;
      _profileType = profileType;
      _optionTasks = optionTasks;
      _generalOptions = generalOptions;
    }