Как уведомить коллекцию об изменениях в UI элементе?
Добрый вечер.
Требуется написать UI-форму для редактирования config-файла (плюс, пару мелочей). В config-e лежат 300 пар имя-url, вытягиваются через ConfigSection. Далее намереваюсь закинуть их в DataGridView, юзер там поколдует, а я считаю обратно. Но считывать обратно - лениво. Погуглил, нашел всякое про уведомление UI элементов об изменениях в DataSource-коллекциях.
Вопрос: можно ли пользовательские изменения в DataGridView автоматом вернуть в коллекцию?
mayorovp , Глянул в сторону BindingList. Взял ListBox lb, установил lb.DataSource = _bList, lb отлично заполняется из _bList. При попытке удалить строку из lb, падает ArgumentException "Изменение коллекции элементов невозможно, если задано свойство DataSource." _bList.AllowRemove = true.
Можно ли как-то сделать, чтобы при удалении строки в lb автоматом исключался объект из _bList?
(Я исхожу из того, что DataSource работает одинаково у ListBox и DataGridView).
mayorovp: Это решает задачу, но рутина ведь :(
По комментарию из прошлой ветки: на wpf обнаружились двунаправленные связи, обязательно надо будет глянуть.
Рутина потому, что нужно предусмотреть редактирование строки, определить, к какому из элементов коллекции относится строка, продумать добавление\удаление элемента. А потом все закодировать. И протестировать. Ничего интересного, короче.
С хорошим механизмом двусторонней связки поставил бы DGV.DataSource = MagicCollection, и пару методов на инициализацию\сохранение. Малина!
Oxoron: При чем тут механизм двусторонней связи? У вас проблема только в том, что ListBox не поддерживает удаление "из коробки", вам в любом случае придется делать свою кнопку удаления, независимо от механизма связи.
Найдете контрол, у которого уже есть кнопка удаления - он сам спокойно удалит строку.
mayorovp: Если я изменю BindingList - изменится связанный с ним UI элемент управления. Если я изменяю UI элемент - BindingList не изменится (без дополнительного рутинного кода).
Изначальный вопрос можно переформулировать как "Существует ли коллекция, которую можно связать с DataGridView (ListBox) так, чтобы изменения в DGV, вносимые юзером во время работы программы, тут же отражались в коллекцию без дополнительного рутинного кода".
Грубо говоря, есть у меня коллекция и DGV. Добавились во время работы программы 3 строки в коллекцию - тут же добавились 3 строки в DGV. Юзер почесал в затылке, удалил две строки из DGV - две строки тут же удалились из коллекции. Вот чего хочется.
Я хочу в одном методе работать либо только с коллекцией, либо только UI контролом (кроме момента установки связи). Как-то так.
Oxoron: эта ошибка возникает, когда вы пытаетесь удалить строчку программно. Но программно вам не важно, откуда удалять строчку - они все равно идут в одинаковом порядке как бы.
Если строчка удаляется пользователем - то она удалится и там и там автоматически.
Увы, применить в данном случае не получится - WinForms задачка, перепрыгнуть на WPF не получится. Да и простоты, вроде, не добавится. Но все равно спасибо, в будущем погляжу на паттерн подробнее.