Я использую 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?
Заранее спасибо