Mahhaps - Показать диалог из класса библиотеки - PullRequest
0 голосов
/ 24 августа 2018

Я использую IDialogCoordinator на ViewModel, и все работает нормально.

Но если в viewmodel у меня есть экземпляр другого класса, он не работает.Я пытаюсь передать dialogCoordinator в конструкторе, но у меня появляется сообщение «Контекст не зарегистрирован».

Как этого добиться?

Viewmodel:

public viewModel
{
  private IDialogCoordinator dialogCoordinator;
  public ICommand SyncCommand { get { return new RelayCommand(SyncCommand_ExecutedAsync); } }  

  public viewModel(IDialogCoordinator _coordinator)
  {
    coordinator = _coordinator;
  }

  private void SyncCommand_ExecutedAsync()
  {
        var sync = new IndexUpdater(dialogCoordinator);
        var b = sync.Start().Result;
  }
}

IndexUpdater:

public IndexUpdater(IDialogCoordinator _dialogCoordinator)
    {
        dialogCoordinator = _dialogCoordinator;
    }

public async Task<bool> Start(bool reset = false)
    {
        var output = true;

        ProgressDialogController controller = await dialogCoordinator.ShowProgressAsync(this, "HEADER", "MESSAGE", true, new MetroDialogSettings { NegativeButtonText = "Close" });
         controller.Minimum = 0;
        controller.Maximum = 100;

        for (int x = 0; x < 100; x++)
        {
            if (controller.IsCanceled)
            {
                output = false;
                break;
            }

            Thread.Sleep(200);

            controller.SetProgress(x + 1);
            controller.SetMessage("x = " + x);
        }

        await controller.CloseAsync();
        return output;
}

В этом случае я получил исключение: «InvalidOperationException: контекст не зарегистрирован. Рассмотрите возможность использования DialogParticipation.Register в XAML для привязки в DataContext.»

Если я поставлю ProgressDialogControllerнепосредственно в методе viewModel.SyncCommand_ExecutedAsync (), затем он работает.

Как зарегистрировать класс IndexUpdater или как передать туда dialogCoordinator?

Заранее спасибо

...