我需要一个自定义绑定,我知道何时何地,但我不知道如何做到这一点。这是我的自定义绑定中视图的关系。考虑像控件一样的视图。 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(),还调用CreateBindingContext()在viewload)
,然后你会能够在你的班级中绑定。在我的情况下:
var set = this.CreateBindingSet<FirstPlayViewController, PlayViewModel>();
set.Bind(source).To(vm => vm.CurrentGolfers).Apply(); //I love the new fluent api :)