Xamarin.ios mvvmcross中的海关约束交叉视图

Xamarin.ios mvvmcross中的海关约束交叉视图,xamarin.ios,mvvmcross,Xamarin.ios,Mvvmcross,我需要一个自定义绑定,我知道何时何地,但我不知道如何才能做到这一点。这是我的自定义绑定中视图的关系。想想*视图,比如控件。 我有来自ViewModel->ContainerView->FirstView的连接,但无法将其连接到TableView。为了将ContainerView连接到FirstView,我做了一个自定义绑定(目前是单向的)。在setvalue方法中,我调用firstview的方法SetBinding(我想在这里进行绑定) 我尝试了几个选项,但什么也没发生,最后一个选项如下: p

我需要一个自定义绑定,我知道何时何地,但我不知道如何才能做到这一点。这是我的自定义绑定中视图的关系。想想*视图,比如控件。

我有来自ViewModel->ContainerView->FirstView的连接,但无法将其连接到TableView。为了将ContainerView连接到FirstView,我做了一个自定义绑定(目前是单向的)。在setvalue方法中,我调用firstview的方法SetBinding(我想在这里进行绑定)

我尝试了几个选项,但什么也没发生,最后一个选项如下:

public GolferList CurrentGolferList { get; set; }
    public void SetBinding(GolferList golferList){
        this.CurrentGolferList = golferList;

        TableSource = new TableSourcePlayers(TableViewPlayers);
        var bindingDescription = new[]{
            new MvxBindingDescription {TargetName = "ItemsSource",SourcePropertyPath = "CurrentGolferList"} ,
        };

        Binder.Bind(this,TableSource, bindingDescription);

        TableViewPlayers.Source = TableSource;
        TableViewPlayers.ReloadData();

    }
如果你能告诉我另一种处理方法,我将不胜感激

更新: 我关注了斯图尔特的链接,现在它运行良好,非常感谢斯图尔特! 实际上,在我的方案中,TableView是一个MVXSimpleBindableTableTableViewSource,我想在那里绑定数据。因此,为了使其正常工作,我使用了下面的代码(SetBinding需要一些外部重构):

(不要忘记dispose调用BindingContext.ClearAllBindings()并在viewload中调用CreateBindingContext())

然后你就可以在课堂上学习了。就我而言:

    var set = this.CreateBindingSet<FirstPlayViewController, PlayViewModel>();
    set.Bind(source).To(vm => vm.CurrentGolfers).Apply(); //I love the new fluent api :)
var set=this.CreateBindingSet();
set.Bind(source).To(vm=>vm.CurrentGolfers.Apply()//我喜欢新的fluent api:)

我认为您要做的是实际的数据绑定视图,而不是自定义绑定

这在本问题中包括—

基本上,您需要做的是向
FirstView
添加一组“Bindings”和“DataContext”属性

如果您这样做,那么您应该能够在FirstView中进行数据绑定(到DataContext),就像在任何普通MvvmCross视图中一样

注意-在v3中,这将更容易实现,因为我们添加了一个“BindingContext”对象来帮助完成这种类型的操作

    public object DataContext
    {
        get { return BindingContext.DataContext; }
        set { BindingContext.DataContext = value; }
    }

    public IMvxBindingContext BindingContext { get; set; }
    var set = this.CreateBindingSet<FirstPlayViewController, PlayViewModel>();
    set.Bind(source).To(vm => vm.CurrentGolfers).Apply(); //I love the new fluent api :)