Чтобы использовать разные шаблоны для разных ячеек, для которых вы хотите использовать DataTemplateSelector, это задокументировано здесь: Создание Xamarin.Forms DataTemplateSelector
Сначала определите его в отдельном классе:
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;
}
}
Затем добавьте его к ресурсам вашей страницы:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:Selector;assembly=Selector" x:Class="Selector.HomePage">
<ContentPage.Resources>
<ResourceDictionary>
<DataTemplate x:Key="validPersonTemplate">
<ViewCell>
...
</ViewCell>
</DataTemplate>
<DataTemplate x:Key="invalidPersonTemplate">
<ViewCell>
...
</ViewCell>
</DataTemplate>
<local:PersonDataTemplateSelector x:Key="personDataTemplateSelector"
ValidTemplate="{StaticResource validPersonTemplate}"
InvalidTemplate="{StaticResource invalidPersonTemplate}" />
</ResourceDictionary>
</ContentPage.Resources>
...
</ContentPage>
А затем просто используйте его в своем списке:
<ListView x:Name="listView" ItemTemplate="{StaticResource personDataTemplateSelector}" />
Чтобы иметь возможность расширять / скрывать ячейки,вам нужно:
- добавить свойство IsExpanded в ViewModel определенного элемента списка
- изменить его на true / false для события ItemSelected вашего списка
- bindвидимость представления, которое вы хотите скрыть / развернуть до значения IsExpanded