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 ?
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 ?
Oi Marco, tudo bem?
Vamos pegar um exemplo de um formulário AgendamentoView
. Ele é composto por 3 arquivos no Xamarin Forms:
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:
AgendamentoView
.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