Почему свойство в моей ViewModel не обновляется при изменении DataGrid?

Я пытаюсь создать UserControl, который позволит мне редактировать словарь типаDictionary<string,string> в сетке (просто редактирование записей, а не добавление или удаление).

Всякий раз, когда я связываю DataGrid со словарем, он отображает сетку только для чтения, поэтому я решил создать преобразователь значений, который бы преобразовал ее вObservableCollection<DictionaryEntry> гдеDictionaryEntry это просто класс с двумя свойствамиKey, а такжеValue.

Это работает для отображения словаря в сетке, но теперь, когда я делаю изменения в сетке, мой словарь не обновляется. Я не уверен почему.

Я думаю, что это либо проблема с настройкой привязок, либо с конвертером значений. Если бы кто-нибудь мог пролить немного света, это было бы фантастически.

Ниже приведена самая маленькая демонстрация, которую я смог сделать, которая показывает, что я делаю. Опять проблема в том, что когда я меняю значения в сетке,MyDictionary на моемMainViewModel не обновляется .. никогда. Почему?

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

Ответы на вопрос(1)

Ваш ответ на вопрос