在Xamarin中使用多个自定义对象数组填充单个Listview

时间:2017-09-05 11:55:43

标签: xaml xamarin xamarin.forms

我是xamarin / Mobile开发的新手。我有一个任务是创建一个listview,它应该使用xamarin.forms填充两个不同类的对象。

`Class A
{
 string PendingRequestID;
 string PendingRequestStatus;
 string PendingRequest;
}

Class B
{
 String CompletedRequestId;
 String ApprovedByUsername;
 DateTime CompletedTime
}

` 上面是两个不同的实体,我需要在单个列表视图中填充两者的对象列表。每个对象都有自己独立的UI布局。

如何在xamarin.forms中的ListView中指定多个ItemSource?

请帮帮我。

2 个答案:

答案 0 :(得分:1)

您无法为ItemSource分配多种类型。因此,一种方法是使用第三个类作为基类,然后从中派生AB。然后将此C类型用作ItemSource

Class C{
   ...
}

Class A : C
{
   string PendingRequestID;
   string PendingRequestStatus;
   string PendingRequest;
}

Class B : C
{
   String CompletedRequestId;
   String ApprovedByUsername;
   DateTime CompletedTime
}

请注意,只要您单击列表中的Item,就需要在运行时检查正确的子类型。

希望它有所帮助!

答案 1 :(得分:1)

只需在ObservableCollection<object>上为ItemsSource创建ListView类型的属性,并使用数据模板选择器向ListView提供基于项目类型的模板。

可以找到一个例子here

编辑 - 1:示例代码

class MyDataTemplateSelector : Xamarin.Forms.DataTemplateSelector
{
    public MyDataTemplateSelector()
    {
        // Retain instances!
        this._typeADataTemplate = new DataTemplate(typeof(TypeAViewCell));
        this._typeBDataTemplate = new DataTemplate(typeof(TypeBViewCell));
    }

    protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
    {
        if (item == null)
            return null;
        return (item is A) ? this._typeADataTemplate : this._typeBDataTemplate;
    }

    private readonly DataTemplate _typeADataTemplate;
    private readonly DataTemplate _typeBDataTemplate;
}
相关问题