Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Duvida

Olá, gostaria de saber se quando o noso a app esta sendo iniciado, o android "Renderiza", (inicia) primeiro o code behind ou as views .xaml ?

2 respostas
solução!

Oi Marco, tudo bem?

Vamos pegar um exemplo de um formulário AgendamentoView. Ele é composto por 3 arquivos no Xamarin Forms:

  • A classe "code behind" AgendamentoView.cs
    public partial class AgendamentoView : ContentPage
    {
        public Veiculo Veiculo { get; set; }
        public string Nome { get; set; }
        public string Fone { get; set; }
        public string Email { get; set; }
        public DateTime DataAgendamento { get; set; }
        public TimeSpan HoraAgendamento { get; set; }

        public AgendamentoView(Veiculo veiculo)
        {
            this.Veiculo = veiculo;
            InitializeComponent();
            this.BindingContext = this;
        }

        private void Button_Clicked(object sender, EventArgs e)
        {
            DisplayAlert("Salvar Agendamento", "Nome: " + Nome, "Ok");
        }
    }
  • A *view * AgendamentoView .xaml

  • A classe gerada automaticamente AgendamentoView .xaml.g.cs:

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.42000
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace TestDrive.Views {
    using System;
    using Xamarin.Forms;
    using Xamarin.Forms.Xaml;


    public partial class AgendamentoView : global::Xamarin.Forms.ContentPage {

        [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Forms.Build.Tasks.XamlG", "0.0.0.0")]
        private void InitializeComponent() {
            this.LoadFromXaml(typeof(AgendamentoView));
        }
    }
}

É importante notar que as classes são marcadas como partial, isto é, no fim das contas, é compilada apenas uma classe AgendamentoView a partir das classes parciais.

Agora note o construtor no arquivo code-behind:

public AgendamentoView(Veiculo veiculo)
{
    this.Veiculo = veiculo;
    InitializeComponent();
    this.BindingContext = this;
}

Note como o método InitializeComponent(); é chamado. Esse método é criado no arquivo gerado automaticamente (): AgendamentoView.xaml.g.cs:

[System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Forms.Build.Tasks.XamlG", "0.0.0.0")]
private void InitializeComponent() {
    this.LoadFromXaml(typeof(AgendamentoView));
}

Isso significa que o conteúdo da view XAML será carregado no momento da criação da classe code-behind AgendamentoView. Portanto:

  • Primeiro, os arquivos AgendamentoView.cs e AgendamentoView.xaml.g.cs são usados para compilar uma única classe, AgendamentoView.
  • Quando a view AgendamentoView é instanciada, o código XAML do arquivo XAML é carregado e usado para construção de uma hierarquia de componentes Xamarin, que fica associada à página através da propriedade ContentPage.Children.

Muito bom