我需要一个自定义绑定,我知道何时何地,但我不知道该怎么做。这是我的自定义绑定中视图的关系。想想像控件一样的*视图。
我有来自 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();
}
如果您能告诉我另一种处理方法,我将不胜感激。
更新:我关注了 Stuart 的链接,现在它工作正常,非常感谢 Stuart!实际上,在我的方案中,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 :)