如何在 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
}
在我的解决方案中,我有这样的代码:
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
}