【问题标题】:MVVM, where to put/handle ui events such as 'onClick'MVVM,放置/处理 ui 事件的位置,例如“onClick”
【发布时间】:2018-10-17 23:32:15
【问题描述】:

我知道这是一个模糊的问题,但我如此专注于 MVP 设计,多年来,我决定让自己保持最新状态并决定冒险进行 MVVM 架构设计,我已经一直在阅读很多关于 MVVM 遵循的 Stream/Observer 模式的博客、示例和资料,但是我不清楚什么(找不到非常简单的代码)MVVM 如何处理 ui 事件?比如点击?在 MVP 中,view 和 Presenter 有一个双向契约来处理这样的事情

// called by view
presenter.onViewButtonClicked 



void onViewButtonClicked() {

      // do something here that business logic requires
      view.doSomethingAfterPresenterReceivedClickEvent() 
}   

我知道 MVVM 中的 View 订阅 ViewModel,当数据(模型)发生问题时,View对它做出反应 p>

现在,我如何告诉 ViewModel 我点击了某些东西? (PS:我知道当我点击某些东西时我必须订阅 ViewModel 才能听到任何更改),我只需要一些指导和示例,我如何告诉 VM 我是故意做某事的。 p>

我阅读了 Microsoft 的 MVVM 文档,其中提到了一些关于 iCommand 的内容,这是一种类似于合同的东西,用于告诉 MVVM 发生了 UI 事件。

有没有人能启发我...提前谢谢

编辑:我忘了说,我没有使用 DataBinding,由于公平的利弊,我决定不使用。

【问题讨论】:

    标签: mvvm architecture mvp


    【解决方案1】:

    我确实不是 MVVM 专家,但据我所知:

    MVPMVVM 的主要区别在于,在 MVP 中,view 之间存在双向连接em> 和 presenter,这意味着 presenter 知道 view (interface)view 知道关于演示者(界面)

    另一方面,在 MVVM 中,这种连接只是一种方式,这意味着 view 知道 viewmodel,但是viewmodel 不知道视图(因为从 viewmodelview 的连接是通过观察到的数据处理的)。 这允许 viewmodel 独立于任何 viewview 实现 并允许单个 viewmodel 由多个视图

    所以(最终)回答您最初的问题:处理“onClick”事件的方式在 MVPMVVM 中基本相同...... 视图 通知 presenter / viewmodel 该事件,然后:

    • presenter 在模型中设置数据并调用 view 上的相应方法(在 MVP 中)
    • viewmodel 设置更改的数据,自动触发对 view 的反应,因为观察到该数据(在 MVVM 中)

    希望这会有所帮助:)

    【讨论】:

    • 感谢您的回复,所以它与 MVP 几乎相同,我应该能够告诉/连接到 VM 我做了什么,但我仍然必须坚持即使我分离 VM,它将独立于视图,谢谢,但我仍然希望有人至少提供一个链接,以获取此类相关示例的链接......
    猜你喜欢
    • 1970-01-01
    • 2019-02-24
    • 2019-06-29
    • 2020-05-29
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多