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