使用MVVMCross绑定到ViewController中的View

时间:2014-02-25 23:09:20

标签: xamarin.ios mvvmcross

所以我一直在浏览网页,但随着MVVMCross的所有更新,我无法弄清楚如何做到这一点。

我非常直接地告诉我,我可以绑定以下内容:

MvxFluentBindingDescriptionSet<PageOneView, PageOneViewModel> set = this.CreateBindingSet<PageOneView, PageOneViewModel>();
set.Bind(_HearingLossPickerView).To(vm => vm.HearingLoss);
set.Apply();

但是,这会创建我的viewmodel的 new 实例。我希望能够使用现有的viewmodel。我试过设置DataContext,但没有骰子。

所以基本上我的流程看起来像这样 ViewController(PagesViewController) - &gt;查看(PageOneView)
MainViewModel(PagesViewModel) - &gt; SubViewModel(PageOneViewModel)

我可以像使用该集一样创建PagesViewModel,我希望基本上将PageOneViewModelPagesViewModel传递到PageOneView

非常基本的东西,所以如果有人可以帮助那些amazballs。

2 个答案:

答案 0 :(得分:1)

MvvmCross允许您覆盖视图模型位置 - 请参阅https://github.com/MvvmCross/MvvmCross/wiki/Customising-using-App-and-Setup

中有关此内容的部分和示例代码

此外,您可以直接在View代码中设置ViewModel - 只需确保在base.ViewDidLoad之前执行此操作,这是MvvmCross执行ViewModel位置的地方。


请注意,在Android和WindowsPhone等环境中依赖预先创建ViewModel的基本模式可能存在问题,其中墓碑意味着您的应用可以在任何活动或页面上关闭并重新启动。

答案 1 :(得分:0)

斯图尔特的回应非常可靠。伟大的东西人。但是在观看N + 1系列中的一些视频之后,你创建了我想要做的事情,我需要做的是延迟绑定。

所以对于其他人来说,请查看N+28 for iOS

实施例

我的孩子ViewModel

this.DelayBind(() =>
{
    MvxFluentBindingDescriptionSet<SomeView, SomeViewModel> set = this.CreateBindingSet<SomeView, SomeViewModel>();
    set.Bind(SubmitButton).To(v => v.NextCommand);
    set.Apply();
});

我的父ViewModel

MvxFluentBindingDescriptionSet<ViewController, ViewControllerViewModel> set = this.CreateBindingSet<ViewController, ViewControllerViewModel>();
set.Bind(SomePage).For(p => p.DataContext).To(v => v.SomeViewModel);