¿Por qué no se actualiza una propiedad en mi ViewModel cuando cambia DataGrid?

Estoy intentando crear un UserControl, que me permitirá editar un Diccionario de tipoDictionary<string,string> en una cuadrícula (solo editando entradas hasta el momento, sin agregar ni eliminar).

Cada vez que enlace el DataGrid a un Diccionario, muestra la cuadrícula como de solo lectura, por lo que decidí crear un convertidor de valores, que lo convertiría en unObservableCollection<DictionaryEntry> dóndeDictionaryEntry Es solo una clase con dos propiedades.KeyyValue.

Esto funciona para mostrar el diccionario en la cuadrícula, pero ahora cuando hago cambios en la cuadrícula, mi diccionario no se está actualizando. No estoy seguro de por qué.

Creo que es un problema con la forma en que tengo configurados mis enlaces o mi convertidor de valores. Si alguien pudiera arrojar algo de luz, sería fantástico.

A continuación se muestra la demostración más pequeña que pude hacer y que muestra lo que estoy haciendo. Nuevamente el problema es cuando cambio los valores en la cuadrícula, elMyDictionary en miMainViewModel no está actualizado ... nunca. ¿Por qué?

MainViewModel.cs

public class MainViewModel : INotifyPropertyChanged
{
    public MainViewModel()
    {
        _myDictionary = new Dictionary<string, string>()
            {
                {"Key1", "Value1"},
                {"Key2", "Value2"},
                {"Key3", "Value3"}
            };
    }
    private Dictionary<string, string> _myDictionary;
    public Dictionary<string, string> MyDictionary
    {
        get
        {
            return _myDictionary;
        }
        set
        {
            if (_myDictionary == value)
                return;
            _myDictionary = value;
            OnPropertyChanged("MyDictionary");
        }
    }
...
}

MainWindow.xaml

<Window ...>
    <Window.Resources>
        <local:MainViewModel x:Key="MainViewModel"></local:MainViewModel>
    </Window.Resources>
    <StackPanel Name="MainStackPanel" DataContext="{Binding Source={StaticResource MainViewModel}}">
        <local:DictionaryGrid />
        <Button Content="Print Dictionary" Click="PrintDictionary"></Button>        
    </StackPanel>
</Window>

DictionaryGrid.xaml

<UserControl ...>
      <UserControl.Resources>
         <testingGrid:DictionaryToOcConverter x:Key="Converter" />
     </UserControl.Resources>
    <Grid>
        <DataGrid ItemsSource="{Binding MyDictionary, 
                                  Converter={StaticResource Converter}}" 
         />
    </Grid>
</UserControl>

DictionaryToOcConverter.cs

public class DictionaryToOcConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var collection = new ObservableCollection<DictionaryEntry>();
        var dictionary = value as Dictionary<string, string>;
        if (dictionary != null)
        {
            foreach (var kvp in dictionary)
                collection.Add(new DictionaryEntry { Key = kvp.Key, Value = kvp.Value });
        }
        return collection;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var dictionary = new Dictionary<string, string>();

        var entries = value as ObservableCollection<DictionaryEntry>;
        if (entries != null)
        {
            foreach (var entry in entries)
                dictionary.Add(entry.Key, entry.Value);
        }

        return dictionary;
    }
    public class DictionaryEntry
    {
        public string Key { get; set; }
        public string Value { get; set; }
    }
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta