配置主页按钮以转到其各自的选项卡
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];
我正在使用 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];