private void HandleControllerUpdate(Controller controller)
        {
            MasterDetailViewModel root = MasterTree.FirstOrDefault();

            if (root == null)
            {
                return;
            }
            root.Update(controller);
        }
 /// <summary>
 /// Called when deactivating.
 /// </summary>
 /// <param name="close">Inidicates whether this instance will be closed.</param>
 protected async override void OnDeactivate(bool close)
 {
     if (!close && MasterTree.Any(vm => vm.HasControllerInMode(Controller.Mode.Manual)))
     {
         if (_askUser.AskYesOrNoQuestion(context: "There are controllers in Manual mode", question: "Set all controllers to Auto mode?"))
         {
             await _informationProvider.SetAllControllersToMode(_moduleName, Controller.Mode.Auto);
         }
     }
     if (_selectedItem != null)
     {
         _informationProvider.UnsubscribeFromControllerChanges(_moduleName, _selectedItem.Id, HandleControllerUpdate);
     }
     await SafeExecute(() => _informationProvider.UnsubscribeFromTreeUpdate(_moduleName, HandleControllerUpdate));
 }
        /// <summary>
        /// Loads the root controller of this module.
        /// </summary>
        public async Task LoadRootController()
        {
            _states.ChangeToLoadingState();
            await SafeExecute(async() =>
            {
                var controller = await _informationProvider.LoadRootController(_moduleName);
                var viewModel  = CreateMasterDetailViewModel(controller, _controllerCommander, _moduleName);
                _masterTree.Clear();
                _masterTree.Add(viewModel);
                if (SelectedItem == null)
                {
                    SelectedItem = MasterTree.FirstOrDefault();
                }

                UpdateControllerPermissions(_masterTree.FirstOrDefault());

                UpdateControllerDisplayName(_masterTree.FirstOrDefault());

                _states.ChangeToContentState();
            });
        }