2016-01-22 3 views
3

В соответствии с этим https://github.com/MvvmCross/MvvmCross/wiki/View-Model-Lifecycle, мы должны реализовать состояние сохранения и перезагрузки для обработки надгробия.Не перезаписывает ли метод ReloadState с Init на MvxViewModel?

Но что произойдет, если у нас есть параметр значения в методе Init?

пример:

public StockDetailViewModel 
{ 
    int stockId; 

    ... 

    void Init(int stockIdAsIntent) 
    { 
     stockId = stockIdAsIntent 
    } 

    protected override void ReloadFromBundle(IMvxBundle state) 
    { 
     id = int.Parse(state.Data["id"]); 
    } 

    protected override void SaveStateToBundle(IMvxBundle bundle) 
    { 
     bundle.Data["id"] = stockId; 
    } 

    async void Start() 
    { 
     stockModel = StockService.Get(stockId); 
    } 

    ... 
} 

Теперь говорят, что мы перейти к модели представления ребенка называется StockFormViewModel. Вызывается метод SaveState. Теперь мы открываем форму, сделать наш бизнес, а затем вызвать this.Close(this);

Если следовать CIRS, сначала Init будет называться, а затем ReloadState.

Но метод Init не удастся, потому что мы исходим из модели детского вида, и никакое намерение не было дано в качестве аргумента, не давая возможности методу ReloadState для запуска и восстановления запаса.

Я уверен, что я делаю что-то здесь не так, но я не могу положить палец на нем ...

+0

Я сам этого не проверял, но, возможно, вы можете перегрузить метод Init. Значение предоставления метода Init без параметров и метода Init с вашим параметром, а затем позволяет mvx выполнять работу по выбору хорошего? – Miiite

+0

К сожалению, я уже пробовал, но не повезло ... – Roubachof

ответ

0

Оказывается, я смешивала MVVMCross навигацию с родительским умыслом навигацией (из-за старый рефакторинг базового класса). Совершенно очевидно, что они не будут работать вместе.

переключиться на полную MVVMCross навигации, и с этим, существует два сценария:

  1. Если вид модели все еще находится в кэше (mvvmcross имеет кэш VM), он получает VM оттуда, и поэтому, когда вы вызываете close на «child», ни один из методов инициализации не вызывается (Init, Reload или Start).
  2. Если модель представления отсутствует в кеше, она восстановит виртуальную машину и вызовет ReloadState вместо Init.
Смежные вопросы