Search code examples
c#xamlxamarin.forms

Xamarin.Forms: bind to a code behind property in XAML


In Xamarin.Forms I would like to bind a code behind property to a label in XAML.

I found many answers and web pages about this topic, but they all cover more complex scenarios.

This is my XAML page:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:TrackValigie"
             x:Class="TrackValigie.SelViaggioPage">
    <ContentPage.Content>
            <StackLayout>
                <Label Text="{Binding ?????????}" />
            </StackLayout>
    </ContentPage.Content>
</ContentPage>

And this is code behind:

[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class SelViaggioPage : ContentPage
{

    private string _lblText;
    public string LblText
    {
        get
        {
            return _lblText;
        }
        set
        {
            _lblText = value;
            OnPropertyChanged();
        }
    }

    public SelViaggioPage()
    {
        InitializeComponent();
    }

    protected override void OnAppearing()
    {

        this.LblText = "Ciao!!";

        base.OnAppearing();
    }
}

I would like to bind the "LblText" property to the label, using XAML only, that means without setting binding or binding context in code behind.

Is this possible?


Solution

  • your page will need to implement INotifyPropertyChanged, but the binding syntax should just be

    <ContentPage x:Name="MyPage" ... />
    
    ... 
    
    <Label BindingContext="{x:Reference Name=MyPage}" Text="{Binding LblText}" />