Hi i have recently looked into WPF and started learning about Events and Commands. I typically use Commands on Button clicks which causes a method to Run in my “view model”.
Is it possible to make the Button react to any other events like the MouseOver event through the use of commnds? Or would WPF Events be used in this case?
If WPF Events are to be used, then should the event handler implementation just call a method in the View Model to keep concerns sperate?
This is a fair question, and one that is a common, yet “solved” (debatably) problem within the MVVM architecture realm. If you are using an MVVM framework, you are likely to find something similar to the EventToCommand Behavior, here is the sample from the MVVM Light Toolkit.
In short, this allows you to map an event to a command binding like so:
Update:
There are two other “reasonable” solutions to this problem:
One uses the now considered legacy “AttachedCommandBehavior” extension found here.
The other is a little bit irritating, but workable.
event purely in the view.
identifier that denotes your command
(perhaps using a const string on the
view)
the view model via reflection and
pass in the command arguments.
This looks gross but I’m fairly certain is actually a bit faster than just using traditional command
bindings. In order to be sure I’d need to see the IL, and I don’t think that it matters in this case.
/Update
I want to note however that this is not always an ideal situation. I’ve discovered that more often than not, I’m using EventToCommand to cover a design issue. Please consider the following:
Most importantly perhaps is that you remember that you are the developer. Guidelines in themselves do not solve problems, but consideration of guidelines may make the solution to a problem apparent.