Вызов события при изменении свойства в ObservableCollection ⇐ C#
Вызов события при изменении свойства в ObservableCollection
Я хочу вызвать событие при изменении свойства в DataGrid, чтобы проверить его допустимость, сохранить его обратно в исходный файл и т. д.
Справочная информация: У меня есть DataGrid, привязанный к наблюдаемой коллекции. На этом этапе я успешно привязал свою наблюдаемую коллекцию к представлению, однако мне не удалось вызвать событие при изменении свойства. Двусторонняя привязка также работает, поскольку я мог наблюдать изменения в коллекции посредством отладки. Я наследую INotifyPropertyChanged через BindableBase(Prism).
public ObservableCollection Cfg { получить {вернуться _cfg; } set { SetProperty (ref _cfg, value); } } частная ObservableCollection _cfg; CfgData содержит 4 свойства:
публичный класс CfgData { общественная строка Handle {get; набор; } общедоступная строка Адрес {get; набор; } общедоступная строка Value {get; набор; } общедоступная строка Описание {get; набор; } public CfgData (дескриптор строки, адрес строки, значение строки) { this.Handle = дескриптор; this.Адрес = адрес; это.Значение = значение; } public CfgData (дескриптор строки, адрес строки, значение строки, описание строки) { this.Handle = дескриптор; this.Адрес = адрес; это.Значение = значение; это.Описание = описание; } } Я заполняю свою коллекцию Observable значениями, считанными из CSV. файл
public ObservableCollection LoadCfg(string cfgPath) { вар cfg = новый ObservableCollection(); пытаться { используя (var Reader = новый StreamReader(cfgPath)) { пока (!reader.EndOfStream) { вар линия = Reader.ReadLine(); значения var = line.Split(';'); если (значения.Длина == 3) { cfg.Add(new CfgData(значения[0], значения[1], значения[2])); } иначе, если (values.Length == 4) { cfg.Add(new CfgData(значения[0], значения[1], значения[2], значения[3])); } } } } поймать (Исключение x) { журнал.Отладка (х); } вернуть файл конфигурации; } Мой XAML
Проблема Двухсторонняя привязка обновляет коллекцию в моей модели просмотра. Однако я хотел бы проверить ввод перед его сохранением. Я также хотел бы иметь возможность добавить некоторые функции, например вызов метода при проверке редактирования. Поэтому я попытался использовать несколько способов обработки событий, например
this.Cfg.CollectionChanged += новый NotifyCollectionChangedEventHandler(Cfg_OnCollectionChanged); или
this.Cfg.CollectionChanged += Cfg_OnCollectionChanged; Однако они никогда не вызывали функции, когда я менял сетку данных.
Вопросы Как создать обработчик событий, который вызывается при изменении свойства? Нужно ли мне сохранять весь набор данных или я могу сохранить только измененную строку данных/свойство?
Я хочу вызвать событие при изменении свойства в DataGrid, чтобы проверить его допустимость, сохранить его обратно в исходный файл и т. д.
Справочная информация: У меня есть DataGrid, привязанный к наблюдаемой коллекции. На этом этапе я успешно привязал свою наблюдаемую коллекцию к представлению, однако мне не удалось вызвать событие при изменении свойства. Двусторонняя привязка также работает, поскольку я мог наблюдать изменения в коллекции посредством отладки. Я наследую INotifyPropertyChanged через BindableBase(Prism).
public ObservableCollection Cfg { получить {вернуться _cfg; } set { SetProperty (ref _cfg, value); } } частная ObservableCollection _cfg; CfgData содержит 4 свойства:
публичный класс CfgData { общественная строка Handle {get; набор; } общедоступная строка Адрес {get; набор; } общедоступная строка Value {get; набор; } общедоступная строка Описание {get; набор; } public CfgData (дескриптор строки, адрес строки, значение строки) { this.Handle = дескриптор; this.Адрес = адрес; это.Значение = значение; } public CfgData (дескриптор строки, адрес строки, значение строки, описание строки) { this.Handle = дескриптор; this.Адрес = адрес; это.Значение = значение; это.Описание = описание; } } Я заполняю свою коллекцию Observable значениями, считанными из CSV. файл
public ObservableCollection LoadCfg(string cfgPath) { вар cfg = новый ObservableCollection(); пытаться { используя (var Reader = новый StreamReader(cfgPath)) { пока (!reader.EndOfStream) { вар линия = Reader.ReadLine(); значения var = line.Split(';'); если (значения.Длина == 3) { cfg.Add(new CfgData(значения[0], значения[1], значения[2])); } иначе, если (values.Length == 4) { cfg.Add(new CfgData(значения[0], значения[1], значения[2], значения[3])); } } } } поймать (Исключение x) { журнал.Отладка (х); } вернуть файл конфигурации; } Мой XAML
Проблема Двухсторонняя привязка обновляет коллекцию в моей модели просмотра. Однако я хотел бы проверить ввод перед его сохранением. Я также хотел бы иметь возможность добавить некоторые функции, например вызов метода при проверке редактирования. Поэтому я попытался использовать несколько способов обработки событий, например
this.Cfg.CollectionChanged += новый NotifyCollectionChangedEventHandler(Cfg_OnCollectionChanged); или
this.Cfg.CollectionChanged += Cfg_OnCollectionChanged; Однако они никогда не вызывали функции, когда я менял сетку данных.
Вопросы Как создать обработчик событий, который вызывается при изменении свойства? Нужно ли мне сохранять весь набор данных или я могу сохранить только измененную строку данных/свойство?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение