That isn't a good answer though and I personally would not be happy with it, so I had a go and found an alternative.
This situation only occurs IF the item you are changing is currently selected and you are binding directly to the source.
Use a CollectViewSource
between the ListBox
and your view model.
<Window x:Class="TestApplication.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<CollectionViewSource x:Key="ViewSource" Source="{Binding Items}" />
</Window.Resources>
<StackPanel>
<Button Content="Change" Click="Button_Click" />
<ListBox x:Name="lst" ItemsSource="{Binding Source={StaticResource ViewSource}}" />
</StackPanel>
</Window>
Can't explain what is going on in your example, may be a bug with WPF, but this is a better/cleaner solution. I suspect IsSynchronizedWithCurrentItem="True"
is creating a view source for you behind-the-scenes and that is why it works.
HTH,