我正在使用 MVVMLight 构建 UWP 应用程序,但在设计模式下我的 ViewModelLocator 有问题。
我创建了 ViewModelLocator:
public class ViewModelLocator
{
public MainPageViewModel Main =>ServiceLocator.Current.GetInstance<MainPageViewModel>();
static ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<MainPageViewModel>();
if (ViewModelBase.IsInDesignModeStatic)
{
SimpleIoc.Default.Register<IMainPageDataService, DesignMainPageDataService>();
}
else
{
SimpleIoc.Default.Register<IMainPageDataService, MainPageDataService>();
}
}
}
然后我将其声明为 App 资源:
<Application.Resources>
<ResourceDictionary>
<viewModels:ViewModelLocator x:Key="Locator"></viewModels:ViewModelLocator>
</ResourceDictionary>
</Application.Resources>
它现在应该可以工作了,我应该可以将 MainPageViewModel 定义为 MainPage DataContext 但 Intellisense 正在强调
<viewModels:ViewModelLocator x:Key="Locator"></viewModels:ViewModelLocator>
有错误
访问被拒绝。(来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))
我注意到,当我不使用 ViewModelBase.IsInDesignModeStatic 属性时,它可以正常工作,我可以在 MainPage 中看到设计数据。像这样的工作:
public class ViewModelLocator
{
public MainPageViewModel Main =>ServiceLocator.Current.GetInstance<MainPageViewModel>();
static ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<MainPageViewModel>();
SimpleIoc.Default.Register<IMainPageDataService, DesignMainPageDataService>();
}
}
你有什么想法来解决这个奇怪的问题吗?