如何将参数传递给 Xamarin 中的自定义 ViewCell?

问题描述

我有自定义 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/xamarin/xamarin-forms/app-fundamentals/templates/data-templates/selector

上面的文档中包含一个示例,您可以在这里查看: https://docs.microsoft.com/en-us/samples/xamarin/xamarin-forms-samples/templates-datatemplateselector/ .