Xamarin.ios MVVMCross从嵌套视图控制器中更改选定的选项卡栏项
我们在应用程序中使用MVVMCross,我遇到了一些问题,我不确定我是否以最佳方式解决了这些问题 我们的一个视图模型包含3个其他视图模型-一个仪表板和2个列表。在iOS中,这是使用MvxTabBarViewController呈现的,它非常有效。Android和WP以类似的方式呈现了这个视图。对象模型的示例如下所示:Xamarin.ios MVVMCross从嵌套视图控制器中更改选定的选项卡栏项,xamarin.ios,mvvmcross,Xamarin.ios,Mvvmcross,我们在应用程序中使用MVVMCross,我遇到了一些问题,我不确定我是否以最佳方式解决了这些问题 我们的一个视图模型包含3个其他视图模型-一个仪表板和2个列表。在iOS中,这是使用MvxTabBarViewController呈现的,它非常有效。Android和WP以类似的方式呈现了这个视图。对象模型的示例如下所示: public class ProjectViewModel : MvxViewModel { public DashboardViewModel Dashboard {ge
public class ProjectViewModel : MvxViewModel
{
public DashboardViewModel Dashboard {get;set;}
public FirstListViewModel FirstList {get;set;}
public SecondListViewModel SecondList {get;set;}
}
我们现在的情况是,如果在DashboardViewModel中发生某个操作,我们希望指示导航更改iOS中的选项卡,并在其他平台上发生同样的事情
我能够在iOS上更改选项卡的唯一方法就是使用它;从iOS项目视图中
目前,我触发此更改的唯一方法是从仪表板ViewModel触发一个事件,然后ProjectViewModel订阅此事件,并触发ProjectView订阅的另一个事件,以指示它以任何设备特定的方式更改选项卡。我忍不住想有更好的办法
我试过查看iOS的自定义ViewPresenter,并在仪表板ViewModel中调用ShowViewModel FirstListViewModel,但该presenter似乎未被使用,因此我们只是正常过渡。我的想法是,我可以进入中间,取消导航请求,然后在投影视图上翻转活动选项卡。
如果有可能,我们可以通过MVVMCross以更好的跨平台方式处理更改,如果您有任何建议,我们将不胜感激。您应该能够通过以下几种方式之一实现这一点:
- 按照您的建议,将自定义演示者与覆盖的
显示一起使用
- 使用带有覆盖的ChangePresentation的自定义演示者-并使用自定义提示
- 使用自定义绑定或ProjectView中属性的绑定来驱动转换
- 使用自定义
属性IMvxInteraction
- 使用来自VM的自定义事件来查看
- 使用messenger将消息从ViewModels发送到视图
考虑到我在MvvmCross方面的经验,我今天可能会选择尝试一种定制
IMvxInteraction
属性的方法。但这可能不适合所有人。。。对于这个样本来说,这肯定是“杀伤力过大”
但是,要做到这一点,我会尝试:
- 将
添加到核心项目中公共枚举显示{Dash,First,Second}
- 添加
属性:ProjectViewModel
private MvxInteraction<Display> _display = new MvxInteraction< Display >(); public IMvxInteraction<Display> DisplayChange { get { return _display; } }
- 绑定将添加到ViewDidLoad中,如下所示:
set.Bind(this).For(v => v.ChangeDisplay).To(vm => vm.DisplayChange);
set.Bind(this).For(v => v.ChangeDisplay).To(vm => vm.DisplayChange);