我正在使用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>();
}
}
您有什么想法来解决这个奇怪的问题吗?
答案 0 :(得分:0)
嗯......我的环境出了问题。我在另一台机器上检查了它,它完美无瑕。
答案 1 :(得分:0)
我遇到了同样的问题,最后使用原生的UWP Windows.ApplicationModel.DesignMode.DesignModeEnabled
修复了它,现在一切运行良好。
此外,我正在转向Prism,不清楚这是一个VS / Blend问题,还是一个MVVMLight问题,但是放慢找到更多我觉得更容易使用的项目和更加强大的Prism 6,比如它例如验证。