【问题标题】:Is System.Windows.Forms.BindingSource equivalent to QSortFilterProxyModel?System.Windows.Forms.BindingSource 是否等同于 QSortFilterProxyModel?
【发布时间】:2017-01-20 17:33:53
【问题描述】:

来自 Qt,在我看来 BindingSource 类提供了相同的功能,并且旨在以与 Qt 中的 QSortFilterProxyModel 相同的方式使用。

阅读When is it worth using a BindingSource?及其答案后:

过滤,排序,同时不改变记录本身的排序顺序(Filter/Sort)

还有:

一个 BindingSource 可以充当另一个 BindingSource 的数据源

这些功能与 Qt 中的 QSortFilterProxyModel 提供的功能相同。

有 Qt 和 Winforms 经验的人能否告诉我我的理解是否正确,如果不正确,使用 BindingSource 和 QSortFilterProxyModel 最大的区别是什么?

【问题讨论】:

  • 我不熟悉 QSortFilterProxyModel,但BindingSource 本身不提供任何排序​​/过滤功能。它充当实际数据源和绑定控件之间的中介,将所有功能请求委托给底层数据源。 IMO BindingSource 的主要目的是提供设计时数据绑定支持。
  • 嗯,在我链接的问题的答案之一中,他们说它提供“过滤、排序,同时不改变记录本身的排序顺序(过滤器/排序)”,所以我认为这是情况,但也许他们的意思是别的。
  • 回答者肯定不知道他们在说什么:) 见source
  • @IvanStoev 你能不能写一个重新定义绑定源的答案(也许与我的答案相比),这些共同构成一个不错的答案。
  • @sashoalm 我认为它既不是 View 也不是 Model(也不是 MVVM 的 ViewModel)——它是一个 Bridge 或 Adapter 模式。模型是实际的底层源和一些用于数据绑定的标准接口/模式。同样,BindingSource 对我来说的主要好处是您可以在设计时将DataSource 属性设置为typeof(MyObject),并且可以填充和设计DataGridView 列(重新排序、隐藏、更改属性),对于数据也是如此文本框的绑定等。然后在运行时分配真实的数据源,例如MyObject 实例或 List 实例等,一切正常

标签: winforms qt bindingsource qsortfilterproxymodel


【解决方案1】:

我不是 winforms 专家,但只是通过阅读它们,它们是相似但不同的。

这里是我的 QSortFilterProxyModel 的关键概念。这有多少适用于BindingSource 或不同,我不能告诉你太多。

  • Qt 中的 ProxyModels 是一个抽象模型,位于您的基本模型之上(这里似乎有一个共同的 BindingSource)。尽管您不能为此添加控件等,因为它们就是:数据模型。您可以将此 ProxyModel 或仅将普通模型附加到视图,并且此视图负责要显示的控件(尽管模型可以提供“提示”)。

  • SortFilterProxyModel 也可以根据字符串对数据进行排序和过滤。您可以从中派生出自定义排序/过滤器。没有货币管理等。

  • 如果您需要,Qt 还鼓励使用这种方法编写您自己的 ProxyModel(您也可以将多个 ProxyModel 叠加在一起)。 这与 BindingSources 有多大不同,你可以自定义多少我不知道

  • 可以通过 Qt 中常用的信号和槽概念来管理更改通知,尽管这里的责任在于 ProxyModel 下的 Model 而不是 ProxyModel。

结论:似乎他们有一个相似的概念,并且都(意外地)支持排序和过滤(也许是因为它只是一个常见的用例) 但它们所投入的模型视图系统的基本概念似乎完全不同。

再一次,这是没有任何或非常粗略的winforms知识,也许其他人可以回答这部分,然后你有一个很好的比较。

【讨论】:

  • 当您强调 QSortFilterProxyModel 只是一个模型这一事实时,您的意思是说 BindingSource(或 DataSource)更像是一个视图,还是介于两者之间?
  • 这是我缺乏有关winforms知识的地方。我读到您将控件绑定到 BindingSource,这对我来说似乎表示“视图”逻辑。或者模型和视图之间的“绑定”。虽然 ProxyModel 仍然是一个模型。在 Qt 中采用模型的所有东西也可以采用 ProxyModel。对于我不知道的 BindingSources 来说,这有多少是真的。
猜你喜欢
  • 1970-01-01
  • 2017-11-29
  • 2010-11-30
  • 2016-02-12
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多