
Стили наполнения страниц
Экраны в Xamarin.Forms принято называть страницами. Каждая страница состоит из двух частей – сама страница в формате XAML и код, стоящий за ней на C#.
Декларативный стиль наполнения через XAML файл
Однако, в таком случае доступ данных необходимо осуществлять через привязанные объекты в указываемом через код контексте. Сложность с таким подходом в том, что нельзя привязать вызов функции, метода объекта или наполнять элемент интерфейса результатом вычисления лямбда-функции. Для адекватной работы в таком формате необходимо «на стороне кода» готовить объекты, в которых будет записано в публичные свойства всё, что необходимо отобразить на странице. Как результат, в большинстве случаев, необходимо создавать дополнительные классы объектов наполнения страниц, заранее преобразовывать данные к тому виду, в котором их необходимо отобразить.
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TextSample.LabelPage"
Title="Label Demo">
<StackLayout Padding="5,10">
<Label TextColor="#77d065" FontSize = "20" Text="This is a green label." />
</StackLayout>
</ContentPage>
Императивный стиль наполнения через файл кода
Противоположный декларативному, императивный стиль наполнения страниц из файлов кода имеет свои преимущества, такие как возможность вывода результатов выполнения любых вычислений без предварительного формирования объектов и записи в их свойства, что позволяет сэкономить время. Кроме того, функция авто-дополнения кода в MSVS ускоряет его набор и уменьшает шанс опечатки.
Тем не менее, есть у данного подхода и значительный недостаток – если страница получается хоть сколько-нибудь сложно по структуре, то её дополнения из разных частей кода становится сложно отслеживать и пропадает представление об итоговом результате, а каждая правка требует пересобрать всё решение, чтобы увидеть изменения.
public partial class LabelPage : ContentPage
{
public LabelPage ()
{
InitializeComponent ();
var layout = new StackLayout { Padding = new Thickness(5,10)};
var label = new Label { Text="This is a green label.", TextColor = Color.FromHex("#77d065"), FontSize = 20 };
layout.Children.Add(label);
this.Content = layout;
}
}
Смешанный стиль
Из двух вышеописанных стилей вытекает возможность их смешивать – от одновременного добавления интерфейсных элементов через XAML и код, которое приведёт к полной путанице, до прописывания имён для всех интерфейсных элементов в XAML-файле, чтобы потом наполнять их данными, обращаясь по именам, из файла кода, что может быть неплохо т.к. совмещает положительные черты обоих методов, но и негативные тоже.
Вывод о выборе стиля наполнения страниц
Исходя из вышесказанного, был выбран декларативный стиль с подготовкой объектов с наполнением страниц для большей наглядности структуры страниц и «горячей перезагрузки» при редактировании.