Я думаю, что я достаточно хорошо понимаю, что делает класс BindingSource, т. Е. Обеспечивает слой косвенности между источником данных и элементом управления пользовательского интерфейса. Он реализует интерфейс IBindingList и, следовательно, также поддерживает сортировку. И я использовал его достаточно часто, без особых проблем. Но мне интересно, использую ли я его чаще, чем должен. Возможно, пример поможет.Когда стоит использовать BindingSource?
Предположим, у меня есть просто текстовое поле в форме (с использованием WinForms), и я хотел бы привязать это текстовое поле к простому свойству внутри класса, который возвращает строку. Стоит ли использовать BindingSource в этой ситуации?
Теперь предположим, что у меня есть сетка в моей форме, и я хотел бы привязать ее к DataTable. Должен ли я использовать BindingSource сейчас?
В последнем случае я, вероятно, был бы , а не, используя BindingSource, как DataTable, из того, что я могу собрать, обеспечивает ту же функциональность, что и сам BindingSource. DataTable будет запускать правильные события, когда строка будет добавлена, удалена и т. Д., Чтобы сетка автоматически обновлялась.
Но в первом случае, когда текстовое поле привязано к строке, я бы, вероятно, имел класс, содержащий свойство string, реализующее INotifyPropertyChanged, чтобы он мог запускать событие PropertyChanged при изменении строки. Я бы использовал BindingSource, чтобы он мог прослушивать эти события PropertyChanged, чтобы он мог автоматически обновлять текстовое поле при изменении строки.
Как это звучит до сих пор? Я все еще чувствую, что в моем понимании есть пробел, который мешает мне видеть всю картину. Это до сих пор было довольно неопределенным вопросом, поэтому я постараюсь задать некоторые более конкретные вопросы - в идеале ответы будут ссылаться на приведенные выше примеры или что-то подобное ...
(1) Стоит ли использовать BindingSource в либо из приведенных выше примеров?
(2) Похоже, что разработчики просто «предполагают», что класс DataTable будет делать правильные вещи, при запуске событий PropertyChanged в нужное время. Как узнать, способен ли источник данных сделать это? Существует ли конкретный интерфейс, который должен реализовать источник данных, чтобы разработчики могли принять такое поведение?
(3) Имеет ли значение, к чему привязан Контроль, при рассмотрении вопроса о том, следует ли использовать BindingSource? Или это влияет только на источник данных? Возможно, ответ (и это выглядит достаточно логично): Control должен быть достаточно интеллектуальным, чтобы прослушивать события PropertyChanged, в противном случае требуется BindingSource. Итак, как можно сказать, способен ли Control сделать это? Опять же, есть ли какой-то конкретный интерфейс, который разработчики могут искать, который должен реализовать Control?
Это путаница, которая в прошлом привела ко мне всегда с использованием BindingSource. Но я хотел бы лучше понять, когда использовать его, чтобы я делал это только тогда, когда это необходимо.
Я думаю, что это отличный вопрос (список связанных вопросов), который каким-то образом не смог получить достойный ответ. – HK1