2017-03-16 7 views
1

ボタンのクリックで実行されるmyコマンドに関連付けられたメソッドの戻り値の型を定義します。例えば、ボタンのクリックでXamarin Forms&MVVMのコマンドメソッドの戻り値の型を定義します。

、ビューモデルコンストラクタ、その後

MasterItemSelectedCommand = new Command<string>(OnMasterItemSelected); 

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

は、私の方法は、のように、この方法から

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"); 
    } 
} 

あり、I私はボタンクリックメソッドで使用できるPageオブジェクトを返したい。私はこのメソッドで戻り値の型としてvoidの代わりにページを使用する場合、私はこのメソッドは間違った戻り値の型を持っているようなエラーが表示されます。

したがって、上記のメソッドの戻り値の型を定義する方法はありますか?助けてください。

答えて

2

コマンド構造体は、そのように使用するようには設計されていません。しかし、コードで手動でコマンドを呼び出す代わりに、パブリックメソッドを定義することができます。

あなたの方法:、

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

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

そして、あなたのボタンのクリックイベントにだけメソッドを使用します:あなたはこのようなコマンドを定義することができます

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

     // and so on ... 
    } 
} 

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

まあが、おかげであなたのソリューションのために。しかし、この場合、コマンドを定義する意味は何か。それは私がボタンクリックで直接呼び出すパブリックメソッドだからです。 –

+0

この場合、コマンドは必要ありません。私はあなたの質問にコマンドを定義したので、完全性のために追加しました。また、コマンドを使用して、コマンドアクションで詳細ページを設定することもできます(ボタンクリックイベントは必要ありません)。コマンドを使用しないでください。 – Joehl

+0

コマンドを追加しました。 MVVMの方法。コマンドに関連するメソッドの戻り値の型を定義する方法がない場合、これはあなたが提案した良いオプションです。 –

関連する問題