カスタムバインディングが必要で、いつどこでそれを実行できるかはわかりません。これは、カスタムバインディングのビューの関係です。コントロールのような*ビューについて考えてください。
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は、ビュー自体ではなく、テーブルを指していることに注意してください。
Update 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 :)