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