【问题标题】:MVVM pattern with PySidePySide 的 MVVM 模式
【发布时间】:2012-06-18 00:31:25
【问题描述】:

我一直在尝试找到一种使用 PySide 实现 MVVM 的方法,但一直没能做到。我认为应该有一种方法可以使用 QItemEditorFactory 从 ViewModels 创建视图,并且可以使用 QDataWidgetMapper 进行数据绑定。

您对如何使用 Qt 和 PySide 实现 MVVM 有任何想法吗?即使 C++ 中有一些资源,我也会尝试将它们翻译成 python。

谢谢。

【问题讨论】:

  • 我到底是怎么想念QDataWidgetMapper 我不知道。我最终自己实现了一个。不知何故,在我对 Qt 文档和资源的所有探索中,我一直对此视而不见。虽然我的映射器有点不同;它允许将任意索引映射到小部件,没有当前行/列的概念。

标签: python qt mvvm pyside architectural-patterns


【解决方案1】:

MVVM 是 MVP(Model-View-Presenter)模式的一种特殊化,并不是 WPF 独有的,而是它最初的一部分。我认为您想要获得的是一个 MVP,将您的域模型公开为该域的视图。

如果你想要 c++ 中的示例,你可以看到 this PDF. 但是,你可以从下面的 manged c# 中的简短概要中获得它的要点:

public class DomainView : IDomainView
{
    private IDomainPresenter domainPresenter = null;

    ///<summary>Constructor</summary>
    public DomainView()
    {
        domainPresenter = new ConcreteDomainPresenter(this);
    }
}

另外,我想知道您可以使用abstract object notation 将模型中的可传递泛型(视图模型)转换为视图。基本上,您需要一个中间函数来标记要序列化的相关部分。

【讨论】:

    【解决方案2】:

    对我来说一个明显的答案是 MVVM 适用于 WPF 和其他一些欢迎这种模式的技术,因此您必须找出是否可以将这种模式应用于其他技术。请阅读 wiki 中的 MVVM。

    【讨论】:

    • 当你在 c#/MVC 中传递视图模型时,基本上是一个 MVVM 系统。这些只是构造/模式。
    【解决方案3】:

    我不知道你想把 MVVM 带到多远,但在基本层面上它是 Qt 自带的,而且我已经使用了很长时间。你有一个特定于业务的模型,比如绑定到数据库。然后,您创建特定于视图的视图模型作为代理模型。您可以根据需要堆叠几层。然后你用一个视图来展示它。只要一切设置正确,它就会“正常工作”。现在,如果您想使用模型来配置视图,Qt 不会直接为您提供任何东西。您需要编写一个可以使用视图模型数据为您实例化和设置视图的工厂类。一切都取决于你想走多远,以及它能给你带来什么架构上的好处。

    【讨论】:

      猜你喜欢
      • 2016-07-12
      • 1970-01-01
      • 2010-12-27
      • 2018-06-30
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      • 2013-08-16
      • 2018-03-25
      相关资源
      最近更新 更多