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

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

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

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

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

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

MainViewModel.cs

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

MainWindow.xaml


    
        
    
    
        
                
    

DictionaryGrid.xaml


      
         
     
    
        
    

DictionaryToOcConverter.cs

public class DictionaryToOcConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var collection = new ObservableCollection();
        var dictionary = value as Dictionary;
        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();

        var entries = value as ObservableCollection;
        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)

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