In this post we will examine one of the aspects of advanced databinding that many people find confusing. Binding . (that is, Binding dot). However, it is surprisingly easy to explain.
Binding . allows you to access the entire binding context.
This is best understood with an example
<StackLayout BindingContext="{x:Static sys:DateTime.Now}"
HorizontalOptions="Center"
VerticalOptions="Center">
<Label Text="{Binding Year, StringFormat='The year is {0}'}" />
<Label Text="{Binding StringFormat='The month is {0:MMMM}'}" />
<Label Text="{Binding Day, StringFormat='The day is {0}'}" />
<Label Text="{Binding StringFormat='The time is {0:T}'}" />
<Label Text="{Binding ., StringFormat='The full date is {0}'}" />
<Label Text="{Binding}" />
</StackLayout>
Here the stacklayout sets its BindingContext to DateTime.Now. That will allow us to bind to properties of the DateTime object that has the current local time. The first few lines are straight forward, we bind to properties of the DateTime object. For example,
<Label Text="{Binding Year, StringFormat='The year is {0}'}"
Here we bind to the Year property of the DateTime object. We then display that year in the label. The same is true for the next few lines. But DateTime does not have a property that provides us the entire date. We note, however, that this StackLayout (the parent element) has set the BindingContext to the DateTime object. We can therefore use
Binding . (binding dot) to access that BindingContext which will give us the full date.
<Label Text="{Binding ., StringFormat='The full date is {0}'}" />
The final line demonstrates that Binding . is really shorthand for Binding — and thus it too presents the full date/time.
Here’s the entire example:
<?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:sys="clr-namespace:System;assembly=netstandard"
x:Class="BindingDot.MainPage">
<StackLayout>
<Frame BackgroundColor="#2196F3" Padding="24" CornerRadius="0">
<Label Text="Binding ." HorizontalTextAlignment="Center" TextColor="White" FontSize="36"/>
</Frame>
<StackLayout BindingContext="{x:Static sys:DateTime.Now}"
HorizontalOptions="Center"
VerticalOptions="Center">
<Label Text="{Binding Year, StringFormat='The year is {0}'}" />
<Label Text="{Binding StringFormat='The month is {0:MMMM}'}" />
<Label Text="{Binding Day, StringFormat='The day is {0}'}" />
<Label Text="{Binding StringFormat='The time is {0:T}'}" />
<Label Text="{Binding ., StringFormat='The full date is {0}'}" />
<Label Text="{Binding}" />
</StackLayout>
</StackLayout>
</ContentPage>

Update: I think the missing part for most people is this. If I have a collection of Dogs and I use an item template then I can bind to any property of each dog in turn. But I can’t bind to the dog itself. That is what Binding . does — it binds to the dog.
Source CodeĀ here
First in this series here
Rodrigo Juarez is a full-stack and Xamarin Certified Mobile Professional developer. His mission is to solve complex problems for his clients focusing on the results, applying the most adequate technology available and best practices to ensure a cost-effective and high-quality solution. He has 20+ years of experience in a wide variety of projects in the development of applications for web, desktop and mobile using Microsoft technologies in areas such as management, services, insurance, pharmacy and banks. He can be reached at Rodrigo Juarez