Форматирование значения привязки и StringFormat

Последнее обновление: 15.12.2022

Встроенный механизм привязки позволяет форматировать привязанное значение. Для этого можно использовать либо свойство StringFormat класса Binding, либо параметр stringFormat метода SetBinding(). Но стоит отметить, что подобное форматирование имеет смысл, когда привязка идет к строковому свойству, либо к свойству, значение которого можно легко преобразовать к строке, например, числовые значения.

Форматирование в 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} указывает на начальное значение, которое передается от привязки.

Форматирование значения привязки в .NET MAUI и C#

Аналогичный пример в 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

В качестве альтернативы можно задать форматирование с помощью свойства 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>
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850