gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:14:42 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com