In WPF and MVVM there is a clear paradigm used commands inherit the ICommand, separating logic from presentation, etc. However, after going to the event model in the MVVM is not clear what their differences from the event handlers?
Answer 1, Authority 100%
I will try in my own words, as he has recently got off the WinForms-approach MVVM and happy about it. My amateur opinion, the genius not claim.
Events
- The event handler receives a reference to a control in the
sender
and all the necessary information about the event in theEventArgs
. Then you can do with them what is required: to change the behavior of the control, or to send the data as far as possible. Set the input data is fixed and not kastomiziruetsya. - The event is called when we need to, the key is pressed, move the mouse, and so on. There are many different events that can come from almost any kind of problems.
but
- Are all in one class
- It is difficult to test
Team
- be anywhere where you can refer to in the declaration
Binding
, the default there, which refers toDataContext
. - can pass any argument in the command.
- The command can be called when necessary through a direct connection, such as a button or via
KeyBindings
. - Are Allowed to perform the command, you can find out in advance of its implementation, the condition is placed in the
CanExecute
. However, many controls have a built-in response to CanExecute, and like yourself can transfer his fortune inDisabled
, ifCanExecute
returnsfalse
(egMenuItem
orButton
). It’s convenient. - It is easy to test by simply calling the command separately from the test method.
Team is not always necessary, for example, they do not need, if we want to do something, if kontrola changing some property. In this case, we can simply bind the property itself and execute code on the fact of changing the properties. The same team do not need to change the appearance or behavior control. In 99% of cases, this is solved directly in xaml with styles and templates.
Currently, the disadvantages have I do not see teams just their purpose quite different, is not such as in event handlers, I would even compare did not.
The most convenient way to use commands, in my opinion, best described by here under Relaying Command Logic .
Answer 2, Authority 67%
I think that the main advantage of the teams – the separation of logic and presentation (what you say). A little clarification:
- You create a team, and you can use it in many
View
, many times. The event is closely linked to the source, so the handler is hung up on theView
, on which hangs the event; - This leads to the fact that the team is easier to test;
- The teams have two methods:
Execute
andCanExecute
. Very convenient that inCanExecute
, you can specify a condition when the load command, and when not to.
Also, you can read those two links (they though in English):
2) https://stackoverflow.com/questions/8452/custom-wpf-command -pattern-example
In addition, you can add that in wpf realized many built-in commands. Here is their list: https://metanit.com/sharp/wpf/7.1.php