As this question's been asked for over an year now and still doesn't have any accepted answer so i would like to contribute on how i got rid of this bug.
I changed my xaml to:
<Calendar Grid.Row="0" Grid.Column="3" x:Name="_calendar" DisplayModeChanged="_calendar_DisplayModeChanged" Loaded="_calendar_OnLoaded"
DisplayDate="{Binding SelectedMonth, UpdateSourceTrigger=PropertyChanged}" DisplayMode="Month" />
//Setting DisplayMode="Month" in xaml and will change it back to "Year" in code behind. so my codebehind code is
private void _calendar_DisplayModeChanged(object sender, CalendarModeChangedEventArgs e)
{
_calendar.DisplayMode = CalendarMode.Year;
}
private void _calendar_OnLoaded(object sender, RoutedEventArgs e)
{
_calendar.DisplayMode = CalendarMode.Year;
}
Loaded event is required to change the display mode for the first time to Year and DisplayModeChanged event is required to change it on subsequent calls when there's selection changed.
I hope it helps someone in future.