2016-07-07 3 views
1

У меня есть два вида: MainView и ProfileView.Метод не вызван в ViewModel - MVVMCross

Пользователь устанавливает Age свойство в ProfileView и нажмите на кнопку со стрелкой предыдущей (PreviousDialog связывания), чтобы перейти MainView обновить Age свойство через Messaging протокола.

Следующая реализация в ProfileViewModel не вызывает метод NotifyUpdate, когда пользователь нажимает на предыдущую кнопку со стрелкой. Интересно, что мне не хватает или что-то не так?

ProfileViewModel.cs

public ICommand PreviousDialog 
{ 
    get 
    { 
     NotifyUpdate(); 
     return new MvxCommand(() => ShowViewModel<MainViewModel>()); 
    } 
} 

// the following method does not get called 
private void NotifyUpdate() 
{ 
    var message = new CustomMessage(this, Age); 
    var messenger = Mvx.Resolve<IMvxMessenger>(); 
    messenger.Publish(message); 
} 

ответ

3

Когда нажмите previous arrow button, то getter из ICommand собственности не вызывается. Вместо этого происходит метод ExecuteICommand, который вызывает delegate, который вы предоставили MvxCommand ... ShowViewModel<MainViewModel>().

Если вы хотите NotifyUpdate получить вызывается, когда previous arrow button нажата, вы должны поставить NotifyUpdate вызов в отдельный метод наряду с ShowViewModel<MainViewModel>() и передать этот метод в MvxCommand .... что-то вроде этого:

public ICommand PreviousDialog 
{ 
    get 
    { 
     return new MvxCommand(() => NotifyAndNavigate()); 
    } 
} 

private void NotifyAndNavigate() 
{ 
    NotifyUpdate(); 
    ShowViewModel<MainViewModel>(); 
} 
+2

В идеале, вам не нужно делать отдельный метод. Просто используйте новый MvxCommand (() => {NotifyUpdate(); ShowViewModel ();}); – Cyriac