配置主页按钮以转到其各自的选项卡

Configure home page buttons to go to their respective tab

我正在使用 MVVMCROSS 在 Xamarin 中开发一个应用程序,我遇到了以下问题:

在我的主视图中,我有 4 个按钮,我的问题是,当我单击任何按钮时,我被定向到根目录,而且我总是从 RootViewModel 中配置的第一个视图掉下来,如何配置我的主按钮这样每个人都会被引导到他们各自的视图。

--查看

[MvxRootPresentation (WrapInNavigationController = false)]
public partial class MainView: BaseScrollViewController
{
    public override void DidReceiveMemoryWarning ()
    {
        base.DidReceiveMemoryWarning ();
        // Release any cached data, images, etc that are not in use.
    }

    public override void ViewDidLoad ()
    {
        base.ViewDidLoad ();

        if (ViewModel == null)
        {
          return;
        }

        // Title = "Welcome!";

        / *
         * Binding
         * /
        var set = this.CreateBindingSet <MainView, Core.ViewModels.MainViewModel> ();

        //set.Bind(stkPassword).For("Visibility").To(x => x.stkPasswordVisibility);
        set.Bind (btnNewOrder) .To (vm => vm.BtnShow);
        set.Bind (btnAvailableOrders) .To (vm => vm.BtnShow);
        set.Bind (btnMyTasks) .To (vm => vm.BtnShow);
        set.Bind (btnMyOrders) .To (vm => vm.BtnShow);

        set.Apply ();
   }
}

--型号

public class MainViewModel: BaseViewModel
{
    private readonly IMvxNavigationService _navigationService;

    private IUserService userService;
    public LoggedUser loggedUser;

    public MainViewModel (IMvxNavigationService navigationService, IUserService userService)
    {
        _navigationService = navigationService;
        this.userService = userService;
    }

    public IMvxCommand BtnShow
    {
        get
        {
            return new MvxCommand (show);
        }
    }
    private void show ()
    {
        ShowViewModel <RootViewModel> ();
    }
 }

今天我配置了所有按钮,当点击时,转到 RootViewModel - 看法

[MvxRootPresentation (WrapInNavigationController = true)]
public sealed partial class RootView: MvxTabBarViewController <RootViewModel>
{
    private bool _isPresentedFirstTime = true;

    public RootView ()
    {
        //ViewDidLoad ();
    }

    public override void ViewWillAppear (bool animated)
    {
        base.ViewWillAppear (animated);

        if (ViewModel! = null && _isPresentedFirstTime)
        {
            _isPresentedFirstTime = false;

            ViewModel.ShowInitialViewModels ();
        }
    }
}

--型号

public class RootViewModel: MvxViewModel
{
    public void ShowInitialViewModels ()
    {
        ShowViewModel <NewOrder2ViewModel> ();
        ShowViewModel <AvailableOrdersViewModel> ();
        ShowViewModel <MyOrdersViewModel> ();
        ShowViewModel <MyTasksViewModel> ();
        ShowViewModel <MoreViewModel> ();
    }
}

我的 RootViewModel 中配置的所有页面都是 MvxTabPresentation。

------ 编辑

通过单击主视图中的按钮,我应该转到您的 TAB 字段,例如,如果我单击 "My Orders",我应该转到 "My Orders" 选项卡。 正如我所解释的,通过单击我的任何按钮,我被定向到第一个 TAB,因为当我单击时我转到 RootViewModel 并且我无法处理我单击的哪个按钮,所以我无法定向到它们各自的 TAB

我正在使用 MvvmCross 5.0.6 版

Image

抱歉延迟回复。

您可以使用 CommandParameter 在按钮单击时通过命令传递参数。

在主视图中

set.Bind (btnNewOrder) .To (vm => vm.BtnShow).CommandParameter(1);
set.Bind (btnAvailableOrders) .To (vm => vm.BtnShow).CommandParameter(2);
set.Bind (btnMyTasks) .To (vm => vm.BtnShow).CommandParameter(3);
set.Bind (btnMyOrders) .To (vm => vm.BtnShow).CommandParameter(4);

在 MainViewModel

public IMvxCommand BtnShow
{
    get
    {
        return new MvxCommand<int>(show);
    }
}

private void show (int _index)
{
    //here we must wrap int into a model ,because the init method only accept object.
    ShowViewModel <RootViewModel> (new ParametersModel { index = _index});
}

在 RootViewModel

public ParametersModel _model;
public void Init(ParametersModel model)
{
    _model = model;
}

参数模型

public class ParametersModel 
{
    public int index { get; set; }
}

如上代码,可以得到参数为1的模型,此时可以决定显示哪个页面。

更新:

参考这个link,创建TabBarController作为示例

how to configure my Main buttons so that each one will be directed to their respective View .

修改ViewDidLoad中的最后一行代码

SelectedViewController = ViewControllers[ViewModel._model.index];