1

我正在使用 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>();
  }
}

你有什么想法来解决这个奇怪的问题吗?

4

2 回答 2

0

嗯...这是我的环境有问题。我在另一台机器上检查了它,它完美无瑕。

于 2016-02-21T18:19:46.367 回答
0

我遇到了同样的问题,最后使用本机 UWP 修复了它Windows.ApplicationModel.DesignMode.DesignModeEnabled,现在一切正常。

此外,我正在切换到 Prism 的过程中,不清楚这是 VS/Blend 问题还是 MVVMLight 问题,但是我发现更多我认为 Prism 6 更易于使用且更强大的项目(例如其验证)放慢了速度.

于 2016-04-08T23:56:29.070 回答