2017-04-27 64 views
1

我想用MVVM模式構建一個Android應用程序。
我讀過Developer's Guide to Microsoft Prism Library 5.0 for WPF瞭解MVVM。它提到ViewModel實現了屬性和命令,因此它們可以通過數據綁定,命令相互交互。幾乎所有關於MVVM的博客都提到Command,但他們都沒有實現Command。
有兩種他們是必要的,以實現mvvm模式中的命令android

<Button 
    ... 
    app:onClick="@{mvvm.onClick}"/> 

public class ViewModel { 
    public void onClick(View view){ 
    } 
} 

另一

<Button 
    ... 
    app:onClick="@{view.onClick}"/> 

public class MyActivity extends Activity { 
    public void onClick(View view){ 
     viewModel.onClick(); 
    } 
} 

public class ViewModel { 
    public void onClick(){ 
    } 
} 

當中哪些是正確的?如果兩者都不對,如何在android的MVVM模式下執行Command?

回答

0

我以MVVM實現的幾個機器人項目。大多數在線資源建議使用你的第一種方法,所以我開始使用它,即layout.xml將保存對viewModel的引用。但是,我很快就沒有遇到這種實施方面的挑戰。

在MVVM,觀點認爲到視圖模型的引用,但視圖模型不成立的任何參考,以查看,所以它是鬆耦合並且可以容易地測試。假設我的onclick按鈕需要插入一行並執行一些動畫。這裏的問題是viewModel沒有任何引用佈局資源,因此它不能做任何佈局相關的功能。

爲了解決這個akward的情況下,我已經改變到第二個方法,即layout.xml持有參考查看和觀點認爲到視圖模型的參考。在view.onClick事件中,我會先做任何與佈局有關的編碼,然後調用我的viewModel.onClick來執行一些核心邏輯,或者根據需要連接到模型。

layout.xml - >查看 - >視圖模型 - >模型

在我看來,沒有對或錯的這個問題。這是基於你的情況和個人喜好。