我已经创建了表源并且不想将它绑定(bind)到当前数据上下文,而是绑定(bind)到另一个由 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
最佳答案
在 View 方面,Mvx 绑定(bind)适用于 IMvxBindingContextOwner
而不是直接适用于 ViewModel
- 这允许它们在整个 ViewModel 更改时更新。
因此,要执行您想执行的操作,您需要提供一个 IMvxBindingContextOwner
,它将您的动态 View 模型作为其 BindingContext 中的当前 DataContext。
为此,请尝试创建一个虚拟所有者,例如:
public class MyOwner : IMvxBindingContextOwner
{
public MyOwner() { BindingContext = new MvxBindingContext(); {
public IMvxBindingContext BindingContext { get; private set; }
}
然后您应该能够将其用作新绑定(bind)集的目标 - 例如
_owner = new MyOwner();
_owner.BindingContext.DataContext = dynamicViewModel;
var set = _owner.CreateBindingSet<MyOwner, DynamicViewModel>();
// set.Bind statements
set.Apply();
未测试...但应该可以...如果您遇到问题,那么也可以考虑使用现成的 MvxView
控件 - 它是一个 BindingContextOwner
并且您可以设置它的DataContext
关于ios - 如何使用 MvvmCross 和 Xamarin.iOS 将 MvxTableViewSource 绑定(bind)到动态创建的 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30146384/