2017-03-16 63 views
1

我想爲與我的命令關聯的方法定義返回類型,該命令在單擊按鈕時執行。例如,在Xamarin Forms&MVVM中定義命令方法的返回類型

在按鈕的點擊,

this.Detail = ViewModel.MasterItemSelectedCommand.Execute(seleteditem); 

鑑於模型構建,

MasterItemSelectedCommand = new Command<string>(OnMasterItemSelected); 

在那之後,我的方法是什麼樣子,

private Page OnMasterItemSelected(string seleteditem) 
{ 
    switch (seleteditem) 
    { 
     case "ABC": 
      return new TestDrillPageDetail("Test Drill Page Detail 1"); 

     case "DEF": 
      return new TestDrillPageDetail("Test Drill Page Detail 2"); 

     case "XYZ": 
      return new TestDrillPageDetail("Test Drill Page Detail 3"); 

     default: 
      return new TestDrillPageDetail("Test Drill Page Detail 1"); 
    } 
} 

從這個方法,我想要返回頁面對象,我可以使用按鈕單擊方法。如果我在這個方法中使用Page而不是void作爲返回類型,那麼我得到的錯誤就像這個方法有一個錯誤的返回類型。

那麼,有沒有什麼辦法來定義上述方法的返回類型?請幫忙。

回答

2

命令結構不是爲了像那樣使用它而設計的。但是您可以定義一個公共方法,而不是在代碼中手動調用該命令。

你的方法:

public Page ChangeMasterItem(string selecteditem) 
{ 
    switch (seleteditem) 
    { 
     case "ABC": 
      return new TestDrillPageDetail("Test Drill Page Detail 1"); 

     // and so on ... 
    } 
} 

可以定義這樣的命令:

public ICommand MasterItemSelectedCommand => new Command<string>((selecteditem) => 
{ 
    var mypage = ChangeMasterItem(selecteditem); 

    // You can use mypage now if you want 
}); 

並在您的按鈕點擊事件,只要使用方法:

this.Detail = ViewModel.ChangeMasterItem(seleteditem); 
+0

好了,謝謝爲您的解決方案。但在這種情況下,定義一個命令的含義是什麼。因爲這是一個公共方法,我直接調用按鈕單擊。 –

+0

在這種情況下,您不需要命令。爲了完整起見,我只是添加了它,因爲您還在您的問題中定義了一條命令。你也可以直接使用該命令並在命令行動中設置你的詳細信息頁面(然後你不需要按鈕點擊事件)或者你不使用命令 – Joehl

+0

我已經添加了命令,因爲我想這樣做MVVM的方式。現在,如果沒有辦法爲與命令關聯的方法定義返回類型,那麼這是您建議的一個很好的選擇。 –