Почему свойство в моей 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; }
}
}