我需要一個自定義綁定,我知道何時何地,但我不知道如何做到這一點。這是我的自定義綁定中視圖的關係。考慮像控件一樣的視圖。 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 :)