Как справиться с «не могу найти представление для модели представления» в Caliburn Micro? - PullRequest
0 голосов
/ 21 ноября 2018

в моем решении у меня есть код, подобный этому:

public async Task<bool> Execute(string target)
{
    var screen = navigationService.NavigateTo(target) as Screen;
    await screen.TaskCompletionSource.Task;
    return true;
}

Из-за природы решения иногда может случиться так, что ViewModel, к которому мы перемещаемся, не всегда имеет соответствующий View.Это приводит к появлению уродливого окна с неотформатированным сообщением:

Не удается найти представление для модели представления

Возможно ли распознать эту ситуацию и как с ней справиться?Например, закрыв экран или перенаправив на другой?

1 Ответ

0 голосов
/ 22 ноября 2018

Вы можете использовать ViewLocator для этой цели.

if ((ViewLocator.LocateForModelType(typeof(DummyViewModel), null, null) is TextBlock tb
    && tb.Text.StartsWith("Cannot find", StringComparison.InvariantCultureIgnoreCase)))
{
    // View does not exist, Terminate or redirect to another
}
else
{
    // View found, redirect to intended one
}
...