 Xamarin 
		Forms  -  Apresentando CollectionView - I
Xamarin 
		Forms  -  Apresentando CollectionView - I|  | Neste artigo vou apresentar o novo recurso CollectionView da versão 4.0 do Xamarin Forms. | 
O Xamarin.Forms vem evoluindo e melhorando a cada nova versão e com a versão 4.0 temos muitas novidades. Hoje vou apresentar o recurso CollectionView.
A CollectionView é uma view para apresentar listas de dados usando diferentes especificações de layout. O objetivo é fornecer uma alternativa mais flexível e eficiente ao ListView.
Este recurso esta disponível a partir da versão 4.0, e, quando escrevi este artigo, estava em modo experimental. Para poder usar a CollectionView teremos que adicionar o código abaixo ás classes AppDelegate no iOS, e, MainActivity no Android, antes da chamada de Forms.Init:
| global::Xamarin.Forms.Forms.SetFlags("CollectionView_Experimental"); | 
Embora sejam similares, cabe destacar as seguintes diferenças entre a ListView e a CollectionView:
A CollectionView possui um modelo de layout flexível, que permite que os dados sejam apresentados na vertical ou na horizontal, em uma lista ou grade;
A CollectionView suporta seleção única e múltipla;
A CollectionView não tem conceito de células. Em vez disso, um modelo de dados é usado para definir a aparência de cada item de dados na lista.
A CollectionView usa automaticamente a virtualização fornecida pelos controles nativos subjacentes.
A CollectionView reduz a superfície da API do ListView. Muitas propriedades e eventos do ListView não estão presentes no CollectionView.
A CollectionView não inclui separadores internos.
Uma mudança que cabe destacar é que a CollectionView não possui o ViewCell oque melhora muito o desempenho.
Se você desejar migrar a ListView para a CollectionView pode consultar o roteiro na documentação oficial neste link: https://docs.microsoft.com/pt-br/xamarin/xamarin-forms/user-interface/collectionview/introduction
Vejamos agora um exemplo prático mostrando como usar a CollectionView.
Recursos usados:
Criando o projeto no Visual Studio 2019 Community
Abra o VS 2019 Community e clique em Create a New Project;
A seguir selecione :
Selecione o template: Mobile App (Xamarin.Forms) e clique em Next;
|  | 
A seguir informe o local e o nome do projeto : XF_CollectionView
A seguir selecione o template Blank e as plataformas que deseja usar. Eu vou usar somente o Android:
|  | 
Clique no botão OK.
Pronto, nosso projeto já esta criado.
A primeira coisa a fazer e alterar o código do arquivo MainActivity do projeto Android incluindo a linha destacada em azul conforme abaixo:
| protected override void OnCreate(Bundle savedInstanceState)
 {
         TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;            base.OnCreate(savedInstanceState);            global::Xamarin.Forms.Forms.SetFlags("CollectionView_Experimental");            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());
} | 
Se estiver usando também a plataforma iOS faça a mesma coisa na classe AppDelegate.
A seguir, ainda no projeto Android, vamos incluir 5 imagens, listadas a seguir, na pasta /Resources/drawable que iremos usar no projeto.
As imagens podem ser obtidas no site: https://material.io/resources/icons/?style=baseline
Implementando um layout básico com CollectionView e Shell
Vamos incluir no projeto, via opção Add New Item, um novo Content Page com o nome de CollectionViewPage.
Vamos usar o arquivo CollectionViewPage.xaml criado para definir um layout básico usando o CollectionView:
| <?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             x:Class="XF_CollectionView.CollectionViewPage">
    <ContentPage.Content>
        <StackLayout>
            <CollectionView x:Name="ColView1" ItemsSource="{Binding Amigos}"
                        Margin="10,0,0,0">
                <CollectionView.ItemTemplate>
                    <DataTemplate>
                        <StackLayout HeightRequest="50" WidthRequest="200" 
                                 Orientation="Horizontal" Padding="0,5,0,5">
                            <Image Source="person"/>
                            <Label Text="{Binding}" VerticalOptions="Center"/>
                        </StackLayout>
                    </DataTemplate>
                </CollectionView.ItemTemplate>
            </CollectionView>
        </StackLayout>
    </ContentPage.Content>
</ContentPage> | 
Observe que a CollectionView é muito parecida com a ListView possuindo o DataTemplate e a propriedade ItemsSource.
Agora abra o arquivo CollectionViewPage.xaml.cs e inclua o código que define uma lista de strings com nomes que iremos usar para exibir na CollectionView:
| using System.Collections.Generic;using Xamarin.Forms;
using Xamarin.Forms.Xaml;namespace XF_CollectionView
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class CollectionViewPage : ContentPage
    {
        public List<string> Amigos { get; set; }
        public CollectionViewPage()
        {
            InitializeComponent();
            Amigos = new List<string>
            {
                "Pedro","Beatriz","Carlos","David","Eduardo","Francisco","Gil","Helena","Ivan",
                "Joel","Cristina","Laurinda","Maria","Nanci","Olivia","Paulo","Amanda",
                "Roberto","Sofia","Timoteo","Ursula","Vincente","William","Xavier","Ivonne"
            };
            ColView1.BindingContext = this;
            // Vertical é o padrão
            ColView1.ItemsLayout = new ListItemsLayout(ItemsLayoutOrientation.Vertical);
        }
    }
} | 
Observe que agora podemos definir a orientação na CollectionView, usando a propriedade ItemsLayoutOrientation , sendo que a padrão é a Vertical. Podemos também fazer a rolagem lateral.
Criando uma página para navegação usando o Shell
Agora eu vou criar uma página para definir opções e navegação usando o novo recurso Shell.
Nota: Para saber mais sobre este recurso veja o meu artigo: Xamarin.Forms : Apresentando o Shell
Antes vamos incluir mais duas views do tipo ContentPage:
Iremos usar essas views para exibir outras opções de leiaute mais adiante. Por isso vou definir, por enquanto, apenas uma Label com o nome da view conforme código a seguir:
|  <StackLayout>
            <Label Text="GridPage" TextColor="Blue" FontSize="Large"
                VerticalOptions="CenterAndExpand" 
                HorizontalOptions="CenterAndExpand" />
</StackLayout> | 
Continuando, vamos aproveitar o arquivo MainPage.xaml já criado no projeto e incluir o código abaixo neste arquivo. Note que alteramos o tipo de Content para Shell:
| <?xml version="1.0" encoding="utf-8" ?> <Shell xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:d="http://xamarin.com/schemas/2014/forms/design" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:XF_CollectionView="clr-namespace:XF_CollectionView" mc:Ignorable="d" x:Class="XF_CollectionView.MainPage"> <ShellItem> <ShellSection Title="Basic" Icon="list"> <ShellContent> <XF_CollectionView:CollectionViewPage/> </ShellContent> </ShellSection> <ShellSection Title="Grid" Icon="grid"> <ShellContent> <XF_CollectionView:GridPage/> </ShellContent> </ShellSection> <ShellSection Title="Carousel" Route="carousel" Icon="carousel"> <ShellContent> <XF_CollectionView:CarouselPage/> </ShellContent> </ShellSection> </ShellItem> </Shell> | 
Para concluir abra o arquivo MainPage.xaml.cs e altere o código para que a página herde de Shell:
| using System.ComponentModel;
using Xamarin.Forms;namespace XF_CollectionView
{
    [DesignTimeVisible(false)]
    public partial class MainPage : Shell
    {
        public MainPage()
        {
            InitializeComponent();
        }
    }
} | 
Executando o projeto iremos obter o seguinte resultado:

Na próxima parte do artigo vamos definir os demais leiautes nas views GridPage e CarouselPage.
Pegue o 
código do projeto compartilhado aqui : 
 XF_CollectionView.zip (sem 
as referências)
 
 XF_CollectionView.zip (sem 
as referências)
							
Romanos 8:32
| Veja os 
    Destaques e novidades do SUPER DVD Visual Basic 
(sempre atualizado) : clique e confira ! Quer migrar para o VB .NET ? 
 Quer aprender C# ?? 
 Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? | 
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a 
Objetos com VB .NET

Xamarim - Desenvolvimento Multiplataforma com C# ... - Macoratti.net
Xamarin.Forms - Olá Mundo - Criando sua primeira ... - Macoratti.net
Xamarin.Forms - Olá Mundo - Anatomia da aplicação - Macoratti.net
https://developer.xamarin.com/api/type/Android.Widget.ListView/
https://developer.xamarin.com/api/property/Android.Widget.ListView.Adapter/
https://developer.xamarin.com/guides/xamarin-forms/user-interface/animation/