2017-03-16 9 views
1

Ich möchte einen Rückgabetyp für eine Methode, die mit meinem Befehl zugeordnet ist, die auf einen Tastendruck ausgeführt wird, definieren. Zum BeispielDefinieren Sie Rückgabetyp für die Befehlsmethode in Xamarin Forms & MVVM

auf Knopf klicken,

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

Im Hinblick Modellbauer,

MasterItemSelectedCommand = new Command<string>(OnMasterItemSelected); 

Danach ist meine Methode, wie,

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

Von diesem Verfahren i Ich möchte das Page-Objekt zurückgeben, das ich mit der Button-Klick-Methode verwenden kann. Wenn ich in dieser Methode als Rückgabewert Page anstelle von void verwende, dann bekomme ich einen Fehler wie, diese Methode hat einen falschen Rückgabetyp.

Also gibt es eine Möglichkeit, den Rückgabetyp für die oben genannte Methode zu definieren? Bitte helfen Sie.

Antwort

2

Die Befehlsstruktur ist nicht dazu gedacht, sie so zu verwenden. Sie können jedoch einfach eine öffentliche Methode definieren, anstatt den Befehl manuell im Code aufzurufen.

Ihre Methode:

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

     // and so on ... 
    } 
} 

Sie den Befehl wie folgt definieren:

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

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

Und auf dem Button-Klick-Ereignis, verwenden Sie einfach die Methode:

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

Nun, vielen Dank für Ihre Lösung. Aber in diesem Fall ist es wichtig, einen Befehl zu definieren. weil es sich um eine öffentliche Methode handelt, die ich direkt beim Klicken anrufe. –

+0

In diesem Fall brauchen Sie den Befehl nicht. Ich habe es nur der Vollständigkeit halber hinzugefügt, weil Sie in Ihrer Frage auch einen Befehl definiert haben. Sie können auch einfach den Befehl verwenden und Ihre Detail-Seite in der Befehls-Aktion setzen (dann brauchen Sie das Button-Klick-Ereignis nicht) oder Sie verwenden keinen Befehl – Joehl

+0

Ich habe Befehl hinzugefügt, weil ich es tun möchte MVVM Weg. Wenn es jetzt keine Möglichkeit gibt, einen Rückgabetyp für diese Methode zu definieren, die mit dem Befehl verknüpft ist, dann ist dies eine gute Option, die Sie vorgeschlagen haben. –

Verwandte Themen