Когда стоит использовать BindingSource?

Я думаю, что понимаю достаточно хорошо, что класс 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. Но я хотел бы понять лучше точно, когда использовать один, так, чтобы я сделал так только при необходимости.

31
задан Justin 15 June 2010 в 04:17
поделиться

1 ответ

Привет, я тоже немного не понимаю по этому поводу.
Когда я использую таблицы данных, они реализуют все интерфейсы.
Однако я всегда использую источник привязки, чтобы быть уверенным ... :)

Есть несколько аргументов, почему я могу думать о

  1. нескольких представлениях для одного и того же набора записей. (т.е. 2 сетки с разными порядками сортировки / фильтрами)
  2. Фильтрация, сортировка без изменения порядка сортировки самих записей (Фильтр / Сортировка)
  3. Возможность на время отключить привязку по соображениям производительности. (когда в таблице есть большие обновления, не слушайте все события IXXChanged)
  4. IErrorprovider никогда не работал у меня без источника привязки, однако это могло быть моей ошибкой.
4
ответ дан 27 November 2019 в 22:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: