问题描述
我有自定义 ViewCell
和两个不同参数的初始值设定项。每个初始值设定项以不同的方式创建一个单元格,具体取决于传递的参数。我使用我将传递的数据创建了一个 ObservableCollection
,并将其分配给 ItemsSource
。接下来需要将完成的单元格返回给ItemTemplate
,但是如何向它传递参数?
public UniversalListPage(ElementType type,List<UniversalBigClass> data)
{
InitializeComponent();
this.Data = new ObservableCollection<UniversalBigClass>(data);
this.DataList.ItemsSource = this.Data;
this.DataList.ItemTemplate = new DataTemplate(() =>
{
return new UniversalCell(/*parameters from ItemSource*/);
});
}
解决方法
如果我理解正确,您可以使用 DataTemplateSelector 来实现这一点。 DataTemplateSelector
可用于在运行时根据项目的属性值选择 DataTemplate
。这使得可以将多个 DataTemplate 应用于同一类型的对象,以自定义特定对象的外观。
数据模板选择器是通过创建一个继承自 DataTemplateSelector 的类来实现的。然后覆盖 OnSelectTemplate
方法以返回特定的 DataTemplate
,如以下代码示例所示:
public class PersonDataTemplateSelector : DataTemplateSelector
{
public DataTemplate ValidTemplate { get; set; }
public DataTemplate InvalidTemplate { get; set; }
protected override DataTemplate OnSelectTemplate (object item,BindableObject container)
{
return ((Person)item).DateOfBirth.Year >= 1980 ? ValidTemplate : InvalidTemplate;
}
}
上面的文档中包含一个示例,您可以在这里查看: https://docs.microsoft.com/en-us/samples/xamarin/xamarin-forms-samples/templates-datatemplateselector/ .