2017-01-24 2 views
1

Ich verwende MVVM-Muster und die nächste Situation. Zum Beispiel existiert ein Verfahren:Verwenden Sie Aktion <T1,T2>, wenn Methode in Messenger registrieren

void LockPressed(KeyEventArgs e) 
    { 
     // Code 
    } 

Und ich hier registrieren es:

App.Messenger.Register("LockPressed", (Action<KeyEventArgs>)LockPressed); 

thath gut funktioniert. Aber wenn ich Methode ändern müssen, denn es zwei Parameter nehmen:

void LockPressed(KeyEventArgs e, string name) 
    { 
     //Code 
    } 

Logicaly resgister Betrieb soll wie folgt aussehen:

App.Messenger.Register("LockPressed", (Action<KeyEventArgs,string>)LockPressed); 

aber keinen Erfolg. Ich habe einen Fehler:

Error CS1503 Argument 2: cannot convert from 'System.Action' to 'System.Action'

Irgendwelche Ideen, wie kann ich es umgehen?

+1

Wenn Sie können, dass mehr einfach sein werde Gewohnheit zu machen 'diejenigen EventArgs', aggregiert 'KeyEventArgs' und' Name' – Shakra

+0

@Jehof MVVM Foundation – MCv

Antwort

2

Dies sollte funktionieren:

App.Messenger.Register("LockPressed", (KeyEventArgs eventArgs)=>LockPressed(eventArgs, "name")); 

oder komplexere

App.Messenger.Register("LockPressed", (KeyEventArgs eventArgs)=> 
    { 
    string name = GetName(); 
    LockPressed(eventArgs, name); 
    }); 

oder

Action<KeyEventArgs> lockPressedAction = (eventargs) => LockPressed(eventargs,"g"); 
App.Messenger.Register("LockPressed", lockPressedAction); 
+0

Delegierte 'Aktion' benötigt keine Argumente – MCv

+1

@MCv was ist, wenn Sie es explizit definieren wie 'Action lockPressedAction = (eventargs) => LockPressed (eventargs," g ");' und rufen Sie dann 'App.Messenger.Register (" LockPressed ", lockPressedAction);' – Jehof

+0

Sie brauchen keine Paranthese um eventargs. 'Register (" LockPressed ", eventArgs => LockPressed (eventArgs," name "));' sollte gut funktionieren. (wenn es mehr als ein Argument gibt, sind sie jedoch erforderlich) – Default

Verwandte Themen