如何使用MvvmCross和Xamarin.iOS将MvxTableViewSource绑定到动态创建的ViewModel

Ale*_*akh 2 data-binding mvvm ios mvvmcross xamarin

我已经创建了表源,并希望不将它绑定到当前数据上下文,而是绑定到由Controller动态创建的另一个ViewModel.

//some button click

var context = new DynamicViewModel();
var source = new MyTableViewSource();
source.ItemsSource = context.DataItems; //I want this line to work with bindings
Run Code Online (Sandbox Code Playgroud)

Stu*_*art 6

在View端,Mvx绑定IMvxBindingContextOwner可以直接用于ViewModel- 这允许它们在整个ViewModel更改时更新.

因此,要执行您想要执行的操作,您需要提供一个将IMvxBindingContextOwner其动态视图模型保存在其BindingContext中的当前DataContext中.

要做到这一点,尝试创建一个虚拟所有者,如:

 public class MyOwner : IMvxBindingContextOwner 
 { 
     public MyOwner() { BindingContext = new MvxBindingContext(); {
     public IMvxBindingContext BindingContext { get; private set; } 
 } 
Run Code Online (Sandbox Code Playgroud)

然后,您应该能够将其用作新绑定集的目标 - 例如

 _owner = new MyOwner();
 _owner.BindingContext.DataContext = dynamicViewModel;
 var set = _owner.CreateBindingSet<MyOwner, DynamicViewModel>(); 
 // set.Bind statements
 set.Apply(); 
Run Code Online (Sandbox Code Playgroud)

没有测试......但是应该工作......如果遇到问题,那么还要考虑使用现成的MvxView控制 - 这是一个BindingContextOwner你可以设置它DataContext