Концепция страниц в Xamarin.Forms

Стили наполнения страниц

Экраны в Xamarin.Forms принято называть страницами. Каждая страница состоит из двух частей – сама страница в формате XAML и код, стоящий за ней на C#.

Глобально, существует 2 подхода к наполнению страниц – декларативное описание в XAML-файле c возможностью привязки объектов из кода и напрямую добавление интерфейсных элементов из кода.   Ожидаемо, каждый из двух подходов имеет преимущества и недостатки.

Декларативный стиль наполнения через XAML файл

Так, в декларативном стиле наполнения через XAML-файл удобно то, что структура страницы примерно понятно из самого файла, т.к. видно какие используются элементы и в каком порядке они размещены на странице. Там же задаётся оформление с помощью параметров. Последние версии Microsoft Visual Studio позволяют использовать «горячую перезагрузку XAML», благодаря которой изменения оформления, вносимые в 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-файле, чтобы потом наполнять их данными, обращаясь по именам, из файла кода, что может быть неплохо т.к. совмещает положительные черты обоих методов, но и негативные тоже.

Вывод о выборе стиля наполнения страниц

Исходя из вышесказанного, был выбран декларативный стиль с подготовкой объектов с наполнением страниц для большей наглядности структуры страниц и «горячей перезагрузки» при редактировании.