UWP + MvvmLight - ViewModelLocator, определенный как ресурс App.xaml, возвращает ошибку "Отказано в доступе" в режиме разработки

Я создаю приложение UWP с MVVMLight, и у меня есть проблема с моим 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>();              
    }
  }
}

И тогда я объявил это как ресурс приложения:

<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>();
  }
}

У вас есть идеи, чтобы решить эту странную проблему?

2 ответа

Решение

Ну... это было что-то не так с моей средой. Я проверил это на другой машине, и она работает безупречно.

Я столкнулся с этой же проблемой и, наконец, исправил ее с помощью встроенного UWP Windows.ApplicationModel.DesignMode.DesignModeEnabled и теперь все работает хорошо.

Кроме того, я нахожусь в процессе перехода на Prism, неясно, является ли это проблемой VS/Blend или проблемой MVVMLight, но замедляется поиск большего количества элементов, которые я считаю более простыми в использовании и более надежными в Prism 6, таких как, например, его Проверка.,

Другие вопросы по тегам