Встроенный механизм привязки позволяет форматировать привязанное значение. Для этого можно использовать либо свойство StringFormat класса Binding,
либо параметр stringFormat метода SetBinding()
. Но стоит отметить, что подобное форматирование имеет смысл, когда привязка идет к строковому свойству, либо к свойству,
значение которого можно легко преобразовать к строке, например, числовые значения.
Определим в коде C# следующую страницу:
namespace HelloApp { class StartPage : ContentPage { public StartPage() { Entry entry = new Entry(); Label label = new Label(); label.BindingContext= entry; label.SetBinding(Label.TextProperty,"Text", stringFormat: "Сообщение: {0}"); StackLayout stackLayout = new StackLayout() { Children = { entry, label}, Padding = 20 }; Content = stackLayout; } } }
Здесь текст метки привязан к тексту поля ввода. В методе SetBinding()
параметру stringFormat
передается следующее значение:
stringFormat: "Сообщение: {0}"
Плейсхолдер {0} указывает на начальное значение, которое передается от привязки.
Аналогичный пример в XAML
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="HelloApp.MainPage"> <StackLayout Padding="20"> <Entry x:Name="entry" /> <Label BindingContext="{x:Reference entry}" Text="{Binding Path=Text, StringFormat='Сообщение: {0}'}"/> </StackLayout> </ContentPage>
Свойству StringFormat
передается некоторая строка в ординарных кавычках, которая указывает, как будет форматироваться значение.
В качестве альтернативы можно задать форматирование с помощью свойства StringFormat объекта Binding
namespace HelloApp { class StartPage : ContentPage { public StartPage() { Entry entry = new Entry(); Label label = new Label(); // свойство StringFormat форматирует значение Binding binding = new Binding { Source = entry, Path = "Text", StringFormat= "Сообщение: {0}" }; label.SetBinding(Label.TextProperty, binding); StackLayout stackLayout = new StackLayout() { Children = { entry, label}, Padding = 20 }; Content = stackLayout; } } }
Аналогичный пример в xaml:
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="HelloApp.MainPage"> <StackLayout Padding="20"> <Entry x:Name="entry" /> <Label Text="{Binding Source={x:Reference Name=entry}, Path=Text, StringFormat='Сообщение: {0}'}"/> </StackLayout> </ContentPage>