Q:

Is this proper way to pass parameters?

Reading this article I found one strange way to pass parameters to object:
_saveProductCommand = new RelayCommand(
                param => SaveProduct(),
                param => (CurrentProduct != null)

Is this typo or proper way to pass parameters?

A:

What you are seeing is not something that applies to general properties, for example if the parameter was a string you would not be able to use the name => statement syntax.
If you look at the definition of RelayCommand you will see that the parameters are of type Action this is a special type that allows you to pass blocks of code or methods as objects, these are generally called Delegates.
The syntax you are referring to is called a Lambda and they come in a few forms.
The simplest is () => doSomething() in this case the lambda does not take any parameters and only calls the doSomething method.
The next is a lambda that takes a parameter param => doSomething(param) in this code the variable param is just a local variable for the code body of the lambda to be able to use, and the code that executes the lambda will need to pass something in, here is a more complete example;
var myLambda = param => doSomething(param);
myLambda("some string value");

So in this example the string will be passed to the doSomething method.
These examples have only covered lambdas that will convert down to the Action class, but you can also write a lambda that will give you a Func. There is also another form called Predicate this is essentially an Action that returns true or false;
I would suggest doing some additional reading on the Action class the Func class and the Predicate class.

