2016-09-13 3 views
2

Исходя из Qt, мне кажется, что класс BindingSource обеспечивает ту же функциональность и предназначен для использования так же, как QSortFilterProxyModel в Qt.Является ли System.Windows.Forms.BindingSource эквивалентным QSortFilterProxyModel?

После прочтения When is it worth using a BindingSource? и его ответы:

Фильтрация, сортировка не меняя порядок сортировки самих записей (Filter/Sort)

А также:

A BindingSource может выступать в качестве источника данных другого источника BindingSource

Те же функции, что и QSortFilterProxyModel в Qt.

Может ли кто-нибудь, у кого есть опыт работы в Qt и Winforms, сказать мне, правильно ли я понял, а если нет, то каковы самые большие различия между использованием BindingSource и QSortFilterProxyModel?

+0

Я не знаком с QSortFilterProxyModel, но сам BindingSource не предоставляет возможности сортировки и фильтрации. Он работает как посредник между фактическим источником данных и связанными элементами управления, делегируя все запросы функций базовому источнику данных. ИМО основной целью «BindingSource» является предоставление поддержки привязки данных времени разработки. –

+0

Хм, в одном из ответов на вопрос, который я связал, они говорят, что он обеспечивает «Фильтрацию, Сортировку, не изменяя порядок сортировки самих записей (Фильтр/Сортировка)», поэтому я предположил, что это так, но, возможно, они имели в виду что-то другое. – sashoalm

+0

Ответчики определенно понятия не имеют, о чем они говорят :) См. [Источник] (http://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/BindingSource.cs,3ae01e7a16f36ff8). –

ответ

1

Я не эксперт по winforms, но, читая об этом, они похожи, но разные.

Итак, вот мои ключевые понятия QSortFilterProxyModel. Насколько это относится к BindingSource или отличается, я не могу вам много рассказать.

  • В ProxyModels в Qt является абстрактной моделью слоистой на вершине своей базовой модели (кажется, с BindingSource в общем здесь). Хотя вы не можете добавить элементы управления и т. Д., Потому что это все, что они: Модели данных. Вы можете прикрепить этот ProxyModel или просто нормальную модель к представлению, и этот взгляд заботится о том, какие элементы управления отображаются (модель может дать «подсказки»).

  • SortFilterProxyModel также может просто сортировать и фильтровать данные на основе строк. Вы можете получить его для пользовательской сортировки/фильтрации. Нет валютного управления и т. Д.

  • Qt также поощряет этот подход, чтобы написать свои собственные ProxyModels, если они вам нужны (вы также можете сложить несколько ProxyModels друг на друга). Насколько это отличается от BindingSources и сколько вы можете настроить их, я не знаю

  • уведомления об изменениях можно управлять с помощью обычных сигналов и слотов концепции в Qt, хотя ответственность здесь лежит в модели под ProxyModel, а не в ProxyModel.

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

Снова это без каких-либо или очень грубых знаний о выигрышах, возможно, кто-то другой может ответить на эту часть, и тогда у вас есть хорошее сравнение.

+0

Когда вы подчеркнули, что QSortFilterProxyModel - это просто модель, вы имели в виду, что BindingSource (или DataSource) больше похож на представление или, может быть, что-то среднее? – sashoalm

+0

Здесь мне не хватает знаний о winforms. Я читал, что вы привязываете элементы управления к BindingSource, который для меня, кажется, указывает логику «просмотра». Или «привязка» между моделью и представлением. Пока ProxyModel все еще модель. Все, что принимает модель в Qt, также может принимать ProxyModel. Насколько это верно для BindingSources, я не знаю. – Hayt

Смежные вопросы