2015-09-18 2 views
1

Здравствуйте, Мне нужна помощь с подсветкой mvvm.MVVM Light - ViewModelLocator, set Недвижимость

Я хочу установить свойства в свой конструктор. Но его вызов только один раз. У меня есть viewModel и вид. Я вызываю viewModel из другого viewModel через ViewModelLocator. В первый раз, когда я вызываю viewModel, все работает нормально, но когда я вызываю viewModel в другие времена, он не работает, потому что он был создан viewModel и его уже вызванный конструктор. Как я могу сбросить (или что-то еще) viewModelLocator, поэтому он вызывает конструктор каждый раз, когда я вызываю viewModelLocator.

В приведенном ниже коде, я звоню другой ViewModel:

var viewModel= (new ViewModelLocator()).TestVM; 
viewModel.Item = _item; 
Messenger.Default.Send(new NotificationMessage("testView")); 
+0

Является ли ваш локатор и ViewModels внутри 'static'? – RenDishen

ответ

0

MVVMLight-х ViewModelLocator не предназначен для инстанциирован непосредственно в коде. Внутри своего конструктора вы должны зарегистрировать все зависимости, которые вы знаете. Ваш ViewModels будет принимать все зависимость в качестве параметров конструктора, как это:

public MainViewModel(IMessenger messenger, IDialogService dialogService) 
{ 
    // Use messenger and dialogService 
    // ... 
} 

При установке ViewModel как DataContext в View, используя свой экземпляр локатора, то ViewModelLocator пытается решить все необходимые зависимости.

Обратите внимание, что по умолчанию для контейнера SimpleIoc необходимо кэшировать все созданные объекты, поэтому ни один из ваших конструкторов не будет вызываться дважды.

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