创建自定义ExpandableListView,如何绑定到axml中的“GroupTemplate”

时间:2014-09-08 17:30:06

标签: mvvmcross

我已根据https://github.com/hlogmans/MvvmCross.DeapExtensions/创建了一个可绑定版本的ExpandableListView,并将其放入我的应用程序中。我想在axml中添加一个可以绑定的GroupTemplate,它类似于MvxListView的ItemTemplate。

我是否需要继承MvxAndroidBindingResource?我也对MvxBindingAttributes如何适应感到困惑。

1 个答案:

答案 0 :(得分:0)

最简单的方法可能是让您了解MvxListViewMvxAdapter的工作原理。

MvxBindingAttributeshttps://github.com/MvvmCross/MvvmCross/blob/v3.1/nuspec/DroidContent/MvxBindingAttributes.xml)允许MvvmCross将新的xml标记添加到axml个文件中。

MvxAndroidBindingResource类(https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Binding.Droid/ResourceHelpers/MvxAndroidBindingResource.cs)是用于解析MvxBindingAttributes中定义的属性标记值的C#代码。

您可以在https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Binding.Droid/Views/MvxListView.cs#L33

中查看MvxListView的实际操作
    public MvxListView(Context context, IAttributeSet attrs, IMvxAdapter adapter)
        : base(context, attrs)
    {
        // Note: Any calling derived class passing a null adapter is responsible for setting
        // it's own itemTemplateId
        if (adapter == null) 
            return;

        var itemTemplateId = MvxAttributeHelpers.ReadListItemTemplateId(context, attrs);
        adapter.ItemTemplateId = itemTemplateId;
        Adapter = adapter;
    } 

特别是,行:

 var itemTemplateId = MvxAttributeHelpers.ReadListItemTemplateId(context, attrs);

这使用MvxAndroidBindingResource中解析的id值来读取local:MvxItemTemplate

的axml标记值