K here's the simple explanation you asked for:
Binding="{Binding}"
that is when you're binding the DataContext
object itself. So whatever is the DataContext
in the current scope where the binding is what is being bound. that can also be written as Binding="{Binding .}"
Next:
Binding="{Binding Propriety1}"
Here you're binding Propriety1
within the current DataContext
. This one is the same as {Binding DataContext.Propriety1, RelativeSource={RelativeSource Self}}" />
Finally:
Binding="{Binding Data.ProprietyName}"
Here you're binding ProprietyName
which belongs to Data
which is a property declared in the current DataContext
All these are shown in this example: Download Link
<StackPanel x:Name="LayoutRoot">
<TextBlock DataContext="{Binding TestStringOne}"
Text="{Binding}" />
<TextBlock DataContext="{Binding TestStringOne}"
Text="{Binding .}" />
<TextBlock Text="{Binding TestStringTwo}" />
<TextBlock Text="{Binding Data.TestStringThree}" />
</StackPanel>
The properties and Data
object's class you can find in MainViewModel.cs
for these