Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin.ios 自定义MvxTouchViewPresenter不显示后续ViewModel_Xamarin.ios_Mvvmcross - Fatal编程技术网

Xamarin.ios 自定义MvxTouchViewPresenter不显示后续ViewModel

Xamarin.ios 自定义MvxTouchViewPresenter不显示后续ViewModel,xamarin.ios,mvvmcross,Xamarin.ios,Mvvmcross,我已经编写了一个自定义的MvxTouchViewPresenter,它允许我显示(RootView),或者显示MvxTabBarViewController(AuthView) 当我的应用程序启动时 如果我告诉它加载TabBarView(AuthView),它会按预期工作 如果我告诉它加载SlidingPanelView(RootView),它也会按预期工作 当我加载AuthView并尝试ShowViewModel()…时,就会出现问题。。。基本上,在这个场景中发生的情况是,尽管我看到Cus

我已经编写了一个自定义的
MvxTouchViewPresenter
,它允许我显示(
RootView
),或者显示
MvxTabBarViewController
AuthView

当我的应用程序启动时

  • 如果我告诉它加载TabBarView(
    AuthView
    ),它会按预期工作
  • 如果我告诉它加载SlidingPanelView(
    RootView
    ),它也会按预期工作
当我加载
AuthView
并尝试
ShowViewModel()
…时,就会出现问题。。。基本上,在这个场景中发生的情况是,尽管我看到
CustomPresenter.Show()
方法已正确运行,但我仍然停留在AuthView

方法是这样的

    public override void Show(MvxViewModelRequest request)
    {
        var viewController = (UIViewController)Mvx.Resolve<IMvxTouchViewCreator>().CreateView(request);
        RootController = new UIViewController();

        // This needs to be a Tab View
        if (request.ViewModelType == typeof(AuthViewModel))
        {
            _navigationController = new EmptyNavController(viewController);
            RootController.AddChildViewController(_navigationController);
            RootController.View.AddSubview(_navigationController.View);
        }

        if (request.ViewModelType == typeof(RootViewModel))
        {
            _navigationController = new SlidingPanelsNavController(viewController);
            RootController.AddChildViewController(_navigationController);
            RootController.View.AddSubview(_navigationController.View);

            AddSlidingPanel<NavigationFragment>(PanelType.LeftPanel, 280);
        }
        base.Show(request);
    }
公共覆盖无效显示(MvxViewModelRequest请求)
{
var viewController=(UIViewController)Mvx.Resolve().CreateView(请求);
RootController=新的UIViewController();
//这需要是一个选项卡视图
if(request.ViewModelType==typeof(AuthViewModel))
{
_navigationController=新的EmptyNavController(viewController);
RootController.AddChildViewController(_navigationController);
RootController.View.AddSubview(_navigationController.View);
}
if(request.ViewModelType==typeof(RootViewModel))
{
_navigationController=新的滑动面板AVController(viewController);
RootController.AddChildViewController(_navigationController);
RootController.View.AddSubview(_navigationController.View);
添加滑动面板(PanelType.LeftPanel,280);
}
显示(请求);
}
而且是全班的


在努力使这项工作正常进行的过程中,我遗漏了什么?

不确定我所做的是否“正确”,但它目前正在发挥作用。我仍然对更好的答案持开放态度

为了简单地解决这个问题,我所做的是添加对
SetWindowRootViewController(_navigationController)的调用就在我调用
base.Show(请求)

公共覆盖无效显示(MvxViewModelRequest请求)
{    
_navigationController=null;
var viewController=(UIViewController)Mvx.Resolve().CreateView(请求);
RootController=新的UIViewController();
//这需要是一个选项卡视图
if(request.ViewModelType==typeof(AuthViewModel))
{
_navigationController=新的EmptyNavController(viewController);
RootController.AddChildViewController(_navigationController);
RootController.View.AddSubview(_navigationController.View);
}
else if(request.ViewModelType==typeof(RootViewModel))
{
_navigationController=新的滑动面板AVController(viewController);
RootController.AddChildViewController(_navigationController);
RootController.View.AddSubview(_navigationController.View);
添加滑动面板(PanelType.LeftPanel,280);
}
其他的
{
抛出新异常(“您试图显示的视图类型当前不受支持。”);
}
//就在这里
SetWindowRootViewController(_navigationController);
显示(请求);
}
    public override void Show(MvxViewModelRequest request)
    {    
        _navigationController = null;

        var viewController = (UIViewController)Mvx.Resolve<IMvxTouchViewCreator>().CreateView(request);
        RootController = new UIViewController();

        // This needs to be a Tab View
        if (request.ViewModelType == typeof(AuthViewModel))
        {
            _navigationController = new EmptyNavController(viewController);
            RootController.AddChildViewController(_navigationController);
            RootController.View.AddSubview(_navigationController.View);
        }

        else if (request.ViewModelType == typeof (RootViewModel))
        {
            _navigationController = new SlidingPanelsNavController(viewController);
            RootController.AddChildViewController(_navigationController);
            RootController.View.AddSubview(_navigationController.View);

            AddSlidingPanel<NavigationFragment>(PanelType.LeftPanel, 280);
        }
        else
        {
            throw new Exception("They View Type you're trying to show isn't currently supported.");
        }

        // RIGHT HERE
        SetWindowRootViewController(_navigationController);

        base.Show(request);
    }