Dlaczego w moim ViewModelu nie zaktualizowano właściwości, gdy zmienia się DataGrid?

Próbuję utworzyć UserControl, który pozwoli mi edytować słownik typuDictionary<string,string> w siatce (dotychczasowa edycja wpisów, nie dodawanie i usuwanie).

Ilekroć wiążę siatkę danych z słownikiem, pokazuje ona siatkę jako tylko do odczytu, więc postanowiłem utworzyć konwerter wartości, który przekształciłby ją wObservableCollection<DictionaryEntry> gdzieDictionaryEntry to tylko klasa z dwiema właściwościamiKey, iValue.

Działa to w celu wyświetlenia słownika w siatce, ale teraz, gdy wprowadzam zmiany w siatce, mój słownik nie jest aktualizowany. Nie jestem pewien dlaczego.

Myślę, że jest to problem ze sposobem skonfigurowania powiązań lub konwerterem wartości. Gdyby ktoś mógł rzucić trochę światła, byłoby fantastycznie.

Poniżej znajduje się najmniejsze demo, jakie mogę zrobić, które pokazuje, co robię. Ponownie problemem jest zmiana wartości w siatceMyDictionary na moimMainViewModel nie jest aktualizowany. Czemu?

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; }
    }
}

questionAnswers(1)

yourAnswerToTheQuestion