如何在 Caliburn Micro 中处理 "cannot find view for viewmodel"?

How to handle "cannot find view for viewmodel" in Caliburn Micro?

在我的解决方案中,我有这样的代码:

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

由于解决方案的性质,有时我们导航到的 ViewModel 可能并不总是有对应的 View。这导致丑陋的 window 和未格式化的消息:

Cannot find view for viewmodel

是否可以识别这种情况以及如何处理?例如通过终止屏幕或重定向到另一个屏幕?

您可以为此目的使用 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
}