2013-04-24 3 views
2

После загрузки последней версии mvvmcross (V3) у меня была некоторая работа, чтобы обновить некоторые мои проекты до нового состояния. Последнее, что я не могу выполнить, - передать параметр viewmodel из tabhost. В старых версиях он работал нормально (но все было по-другому), и теперь я получил ошибку.TabHost pass Parameter in CreateIntentFor <>

Но сначала здесь код (строка 19 делает неисправности (часы комментарий в коде), линия 18 работ, но только без параметров):

[Activity] 
public class MainActivity : MvxTabActivity 
{ 
    public new MainViewModel ViewModel 
    { 
     get { return (MainViewModel)base.ViewModel; } 
     set { base.ViewModel = value; } 
    } 

    protected override void OnViewModelSet() 
    { 
     SetContentView(Resource.Layout.Main); 

     TabHost.TabSpec spec; 
     Intent intent; 

     spec = TabHost.NewTabSpec("listeaktiv"); 
     spec.SetIndicator(App.indicatorActive, Resources.GetDrawable(Resource.Drawable.green)); 
     //spec.SetContent(this.CreateIntentFor(ViewModel.ListViewModel)); -> It works (But only without Parameters! How could I pass them here?) 
     spec.SetContent(this.CreateIntentFor<ListViewModel>(new { parameter = App.indicatorActive })); //Exception (on the next Line) 
     TabHost.AddTab(spec); 
    } 

    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 
    } 
} 

(App.indicatorActive является параметр Я хочу передать , его в App.cs: (public static string indicatorActive = "Active";)

Мой ListViewModel выглядит следующим образом:

public class ListViewModel : BaseViewModel 
{ 
     public ListViewModel(string parameter) 
     { 

     } 
} 

Ошибка:

Unhandled Exception: 
Cirrious.CrossCore.Exceptions.MvxException: Failed to load ViewModel for type 
INApplikationsMonitor.Core.ViewModels.ListViewModel from locator MvxDefaultViewModelLocator 
+0

вы можете добавить несколько комментариев - у вас есть два SetContent линии - то, что один работает, а какой нет (говоря «Строка 18» на самом деле мне не помогает - извините, но вас не должно беспокоить!). Является ли ошибка для кода с комментариями? Или для несанкционированного кода? Извините, просто запутался, является ли ошибка для кода в реальном времени или прокомментированного кода или для чего-то еще ... – Stuart

+0

Первый SetContent работает отлично (но только без параметров, здесь я не знаю, как их передать), и Второй SetContent не работает (его с параметрами) .. он дает мне ошибку – eMi

+0

С комментарием в коде, я имел в виду «Текст», а не сам код комментирования - sry для путаницы – eMi

ответ

1

Моя предположение, что это только потому, что вы используете старый жизненный цикл ViewModel.

В v3:

  • параметры конструктора ViewModel используются для IoC - для Dependency Injection услуг.
  • для передачи параметров, которые необходимо вместо использовать Init метод в ViewModel

Более подробно об этом см: http://slodge.blogspot.co.uk/2013/03/v3-new-viewmodel-lifecycle.html:

The default ViewModelLocator in v3 builds new ViewModel instances using a 4-step process - CIRS:

  • Construction - using IoC for Dependency Injection
  • Init() - initialisation of navigation parameters
  • ReloadState() - rehydration after tombstoning
  • Start() - called when initialisation and rehydration are complete
+0

отлично, что сработало спасибо – eMi