1

I'm using mvvm pattern, and have the next situation. For example exists a method:

    void LockPressed(KeyEventArgs e)
    {
       // Code
    }

And here I register it:

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

Thath works fine. But If I need to modify method, for it to take two parameters:

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

Logicaly resgister operation should look like:

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

But no success. I got an error:

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

Any ideas how can I workaround it?

Jehof
  • 34,674
  • 10
  • 123
  • 155
MCv
  • 118
  • 1
  • 10

1 Answers1

2

This should work:

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

or more complex

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

or

Action<KeyEventArgs> lockPressedAction = (eventargs) => LockPressed(eventargs,"g");
App.Messenger.Register("LockPressed", lockPressedAction);
Jehof
  • 34,674
  • 10
  • 123
  • 155
  • Delegate 'Action' does not take 1 arguments – MCv Jan 24 '17 at 10:22
  • 1
    @MCv what if you define it explicitly like `Action lockPressedAction = (eventargs) => LockPressed(eventargs,"g");` and then call `App.Messenger.Register("LockPressed", lockPressedAction);` – Jehof Jan 24 '17 at 10:27
  • you don't need the paranthesis around eventargs. `Register("LockPressed", eventArgs => LockPressed(eventArgs, "name"));` should work fine. (if there are more than one argument they are required though) – default Jan 24 '17 at 11:01