2017-09-05 101 views
0

我是xamarin/Mobile开发的新手。我得到了一个任务来创建一个listview,它应该使用xamarin.forms填充两个不同类的对象。使用Xamarin中的多个自定义数组对象填充单个Listview

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

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

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

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

请帮帮我。

回答

1

ListView刚刚创建ItemsSourceObservableCollection<object>类型的财产,以提供基于项目类型模板(县)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; 
} 
+0

这是最好的方法,数据模板非常适合这种情况。 – Digitalsa1nt

+0

@Sharada Gururaj。感谢您的解决方案。我现在将尝试使用此解决方案。 – Thavudu

+0

@sharada Gururaj。它的工作正常:)。我如何添加一个控件的事件处理程序驻留在customview单元格中?我是否需要将其添加到customviewcell的cs页面或我的Maincontentpage cs文件中?如果我必须将它添加到Maincontentpage的cs文件中;如何在Customviewcell的xamal中指定它? – Thavudu

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在运行时检查为右亚型。

希望它有帮助!

+0

要添加,当你定义你的列表视图绑定到的ObservableCollection,这将是的ObservableCollection 其中C是你的两个子类型继承的类。 – Joagwa

+0

@ Tait的感谢您的宝贵建议,但在我的情况下,我需要根据类型有不同的UI布局。 – Thavudu

+0

@Thavudu好吧,对不起,我错过了这些信息。然后DataTemplateSelector是要走的路。快乐的编码! –