WPF: Обновлять из программы значение Label, которое привязано с помощью binding

Если рассмотреть простой пример использования binding,

 <Window x:Class="Wpf_Binding_INotifyDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="110" Width="350">
    <StackPanel VerticalAlignment="Stretch">
        <Button Grid.Column="0" x:Name="btnStart" Content="Push" Width="45" Height="25" 
         Click="btnStart_Click"/>
        <Label Grid.Column="1" 
         Content="{Binding Path=IntCounter, StringFormat='String {0}'}"/>
    </StackPanel>
</Window>

то можно увидеть, что в этом примере Label все время отображает 0, хотя при нажатии на кнопку переменная IntCounter увеличивает значение на единицу:

private void btnStart_Click(object sender, RoutedEventArgs e)
{
    IntCounter++;
}

Чтобы привязка заработала, нужно в код добавить несколько строк:
1. Добавить для главного окна наследование от INotifyPropertyChanged
2. В MainWindow() дописать

this.DataContext = this;

3. Дописать хэндлер для нотификации изменений.
Таким образом окончательный код будет таким:

namespace Wpf_Binding_INotifyDemo
{
    public partial class MainWindow : Window, INotifyPropertyChanged
    {
        private int _IntCounter;
        public int IntCounter
        {
            get
            {
                return _IntCounter;
            }
            set
            {
                _IntCounter = value;
                OnPropertyChanged("IntCounter"); 
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
        public MainWindow()
        {
            IntCounter = 0;
            InitializeComponent();
            this.DataContext = this;
        }
        private void btnStart_Click(object sender, RoutedEventArgs e)
        {
            IntCounter++;
        }
    }
}