Android fragments 在MvxItemTemplate中使用的片段上设置ViewModel

Android fragments 在MvxItemTemplate中使用的片段上设置ViewModel,android-fragments,mvvmcross,Android Fragments,Mvvmcross,我已经看过了这些示例,它们显示了视图中单个片段的使用。在该视图中,您可以找到片段并设置其“ViewModel” 我们在一些地方这样做,就像这样 // Expand the patient banner var myFragment = (MyFragment)SupportFragmentManager.FindFragmentById(Resource.Id.banner); this.vm = (MyViewModel)this.ViewModel; myFragment.ViewModel

我已经看过了这些示例,它们显示了视图中单个片段的使用。在该视图中,您可以找到片段并设置其“ViewModel”

我们在一些地方这样做,就像这样

// Expand the patient banner
var myFragment = (MyFragment)SupportFragmentManager.FindFragmentById(Resource.Id.banner);
this.vm = (MyViewModel)this.ViewModel;
myFragment.ViewModel = this.vm;
那很好。我不知道如何在列表的MvxItemTemplate中使用片段时在该片段上设置ViewModel

例如,将MvxItemTemplate设置为此axml文件的绑定MvxListView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    local:MvxBind="Click ClickCommand">
    <fragment
        class="MyComp.MyDept.Droid.Views.ItemFragment"
        android:id="@+id/ItemFragment"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</LinearLayout>


如何为每个ListView项目中的片段设置正确的项目视图模型?

最简单的方法是在适配器中进行设置。当包含项的列表调用GetBindableView时,您将可以访问dataContext和templateId,这两个元素首先生成了单元格的创建,因此您可以在使用简单的FindFragmentById将片段直接从视图中拉出后,在那里相应地设置它们

所以,类似这样的事情对你来说应该很好:

    protected override View GetBindableView (View convertView, object dataContext, int templateId)
    {
        var view = base.GetBindableView (convertView, dataContext, templateId);         
        var frag = (this.Context as Activity).FragmentManager.FindFragmentById<MvxFragment>(<YourDroidNamespace>.Resource.Id.ItemFragment); // Better to pass in a fragment manager instance in the constructor
        frag.DataContext = dataContext;
        return view;
    }
受保护的覆盖视图GetBindableView(视图转换视图、对象dataContext、int templateId)
{
var view=base.GetBindableView(convertView、dataContext、templateId);
var frag=(this.Context as Activity).FragmentManager.FindFragmentById(.Resource.Id.ItemFragment);//最好在构造函数中传递一个片段管理器实例
frag.DataContext=DataContext;
返回视图;
}

首先,获取片段所在的视图。其次,获取片段管理器并对其执行FindFragmentById以在视图中查找特定片段。最后,设置DataContext并返回它。

您解决了这个问题吗?解决方案是什么?谢谢你的回复