/// <summary>
 /// Observe the settings panel activation and adds command.
 /// </summary>
 /// <param name="observer"></param>
 /// <returns></returns>
 public IDisposable Subscribe(IObserver <Unit> observer)
 {
     return(Observable.Defer(() =>
     {
         var settingsPane = SettingsPane.GetForCurrentView();
         return Observable.FromEventPattern <TypedEventHandler <SettingsPane, SettingsPaneCommandsRequestedEventArgs>, SettingsPaneCommandsRequestedEventArgs>(
             h => settingsPane.CommandsRequested += h,
             h => settingsPane.CommandsRequested -= h,
             _dispatcher);
     })
            .Do(args =>
     {
         var settingsArgs = args.EventArgs;
         foreach (var commandDefinition in _commandDefinitions.Where(d => d.Command(_viewModel.Value).CanExecute(null)))
         {
             CommandDefinition definition = commandDefinition;
             settingsArgs.Request.ApplicationCommands.Add(new SettingsCommand(
                                                              commandDefinition.Id,
                                                              _resources.Get(commandDefinition.TitleKey),
                                                              command => definition.Command(_viewModel.Value).Execute(null)));
         }
     })
            .SelectUnit()
            .Subscribe(observer));
 }