我是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?
请帮帮我。
答案 0 :(得分:1)
您无法为ItemSource
分配多种类型。因此,一种方法是使用第三个类作为基类,然后从中派生A
和B
。然后将此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;
}