Answer
A DataTemplateSelector chooses a DataTemplate at runtime based on the bound item. Override OnSelectTemplate to return different templates for different data types or states. It's useful for heterogeneous lists—chat bubbles for sent vs received messages, or different cards per item category.
public class MessageTemplateSelector : DataTemplateSelector
{
public DataTemplate Incoming { get; set; }
public DataTemplate Outgoing { get; set; }
protected override DataTemplate OnSelectTemplate(object item, BindableObject c)
=> ((Message)item).IsMine ? Outgoing : Incoming;
}Real-world example A chat screen renders the current user's messages right-aligned and others' left-aligned using one CollectionView and a template selector.