xamarin.ios – 海关绑定mvvmcross中的交叉视图

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

我有来自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是一个MvxSimpleBindableTableViewSource,我想在那里绑定数据.所以为了使它工作,我使用下面的代码(SetBinding需要一些外部重构):

    private List<IMvxUpdateableBinding> bindings;
    private string BindingText = "{'ItemsSource':{'Path':'CurrentGolfers'}}";
   public object DataContext { 
        get { return dataContext; }
        set { dataContext = value;
            if (bindings == null)
                bindings = this.GetService<IMvxBinder>().Bind(dataContext, TableSource, BindingText).ToList();
            else
                bindings.ForEach(b => b.DataContext = dataContext);
           }
        }
    public void SetBinding(GolferList golferList){
        this.DataContext = PlayViewModel;
        tableView.Source = TableSource;
        tableView.ReloadData();
   }

请注意,BindingText指向表,而不是指向视图本身.

更新2
现在在V3中它有点不同.首先,视图必须实现IMvxBindable和这个成员:

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

    public IMvxBindingContext BindingContext { get; set; }

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

然后你就可以在你的班级中绑定.就我而言:

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

最佳答案 我认为你想要做的是实际的数据绑定视图,而不是自定义绑定.

这个问题包含在这个问题中 – Custom bindable control in a MvvmCross Touch project

基本上你需要做的是将一个’Bindings’和’DataContext’属性的集合添加到你的FirstView.

如果你这样做那么你应该能够在FirstView中数据绑定(到DataContext),就像在任何正常的MvvmCross视图中一样.

注意 – 这在v3中要容易得多,因为我们添加了一个’BindingContext’对象来帮助完成这种类型的操作

点赞