如何处理Caliburn Micro中的“无法找到视图模型的视图”?

时间:2018-11-21 17:07:18

标签: c# .net caliburn.micro caliburn

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

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

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

  

找不到视图模型的视图

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

1 个答案:

答案 0 :(得分:0)

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