2016-12-27 2 views
1

Я пытаюсь код ниже, чтобы найти ссылку на вид модели локатора, но я получаю сообщение об ошибке говорящее ссылка на объект не может быть установлен на экземпляр объекта: -Отнесение вид модели локатора в MVVM свете, используя класс

internal class Locator : ViewModelLocator 
{ 
    private static readonly Lazy<Locator> _locator = new Lazy<Locator>(() => new Locator(), LazyThreadSafetyMode.PublicationOnly); 
    public static Locator Instance => _locator.Value; 
    private Locator() 
    { 
     SimpleIoc.Default.Register<MainViewModel>(); 
     SimpleIoc.Default.Register<AddStudentViewModel>(); 
    } 
} 

Может ли кто-нибудь помочь мне в этом, Чтобы решить эту проблему?

ответ

0

вам нужно создать метод, как это после регистрации вашего ViewModel

public CreateAssetViewModel CreateAssetVM 
    { 
     get 
     { 
      if (!SimpleIoc.Default.IsRegistered<CreateAssetViewModel>()) 
      { 
       SimpleIoc.Default.Register<CreateAssetViewModel>(); 
      } 
      return ServiceLocator.Current.GetInstance<CreateAssetViewModel>(); 
     } 
    } 
2

Я использую сильфон код в моем проекте, вам необходимо добавить общественности получить набор свойства для определения местоположения модели вида в классе локатора: -

internal class Locator : ViewModelLocator 
     { 
      private static readonly Lazy<Locator> _locator = new Lazy<Locator>(() => new Locator(), LazyThreadSafetyMode.PublicationOnly); 
      public static Locator Instance => _locator.Value; 

      private Locator() 
      { 
       SimpleIoc.Default.Register<MainViewModel>(); 
       SimpleIoc.Default.Register<AddStudentViewModel>(); 

      } 

      public MainViewModel Main 
      { 
       get 
       { 
        return ServiceLocator.Current.GetInstance<MainViewModel>(); 
       } 
      } 
      public AddStudentViewModel AddStudentViewModel 
      { 
       get 
       { 
        return ServiceLocator.Current.GetInstance<QuestionsViewModel>(); 
       } 
      } 

     } 

или еще один способ реализации такой же как ниже: - вы можете создать набор получить свойство локатора в app.cs: -

public static ViewModelLocator Locator 
     { 
      get { return _locator ?? new ViewModelLocator(); } 
     } 
1

Я предпочел бы вам первый метод с помощью отложенной загрузки вы можете найти ссылку вашего локатора :)

private static readonly Lazy<Locator> _locator = new Lazy<Locator>(() => new Locator(), LazyThreadSafetyMode.PublicationOnly); 
      public static Locator Instance => _locator.Value; 
+0

Спасибо Я Находить то же самое. – Rahool

Смежные вопросы