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

标签 ios mvvm data-binding xamarin mvvmcross

我已经创建了表源并且不想将它绑定(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/

相关文章:

ios - startUpdatingLocation 返回 nil

ios - 防止 UIWebView 为 tel 链接显示 UIPopoverController

c# - 当组合值设置为一个值时禁用 WPF 数据网格中的单元格 - MVVM

c# - 从代码隐藏调用命令

jquery - 如何将 Kendo DropDownList 绑定(bind)到 Observable 类?

c# - if 语句中的数据绑定(bind)

ios - 网页 View 上的多个图像无法正确滑动

ios - Unity ARKit 在启动时自动定位地形

c# - 具有过滤器和自动完成功能的组合框

c# - 获取 WPF Treeview 的 SelectedItem