MvvmCross で TabActivity を使用しようとしていますが、OnViewCreate に渡された viewModelLoader が null であるため、フレームワーク コードで NullReferenceException を取得しています。
namespace Cirrious.MvvmCross.ExtensionMethods
{
public static class MvxViewExtensionMethods
{
public static void OnViewCreate<TViewModel>(this IMvxView<TViewModel> view, Func<TViewModel> viewModelLoader)
where TViewModel : class, IMvxViewModel
{
if (view.ViewModel != null)
return;
var viewModel = viewModelLoader();
viewModel.RegisterView(view);
view.ViewModel = (TViewModel)viewModel;
}
これは、ViewModel 経由ではなく直接ビューを読み込もうとしていることが原因であると思われます。私の TabHost アクティビティのコードは次のようになります。
[Activity(Label = "TabHost")]
public class TabHostView : MvxBindingTabActivityView<TabHostViewModel>
{
protected override void OnViewModelSet()
{
SetContentView(Resource.Layout.Page_TabHostView);
var tabHostWidget = this.TabHost;
TabHost.TabSpec spec; // Resusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab
// Create an Intent to launch an Activity for the tab (to be reused)
intent = new Intent(this, typeof(HomeView));
intent.AddFlags(ActivityFlags.NewTask);
// Initialize a TabSpec for each tab and add it to the TabHost
spec = tabHostWidget.NewTabSpec("home");
spec.SetIndicator("Home", Resources.GetDrawable(Resource.Drawable.icon_home));
spec.SetContent(intent);
tabHostWidget.AddTab(spec);
//... more tabs
どうすればこの問題を回避できますか?
また、TabHostViewModel が各タブ ページ ViewModel のプロパティを持つように、ViewModel が設定されています。これらは、プロパティの get アクセサーが呼び出されたときにのみモデルからデータを取得するという点で怠惰です。
したがって、タブ ページの axml レイアウトにデータ バインディングがある場合、おそらくパスは TabHostViewModel がコンテキスト (ルート) であると想定する必要がありますか?
どうもありがとう、ジェイソン