I have begun creating a wpf mvvm app. It seems a vital ingredient to the ViewModel is a bunch of ICommands to have a loosely coupled way of allowing the view to interact with the viewmodel.
My question is this, why can’t I bind directly to a method?
I have used Josh Smith’s RelayCommand implementation of ICommand that allows you to inject delgates into an ICommand object, but really, is there some easier way to allow a button push to call a method in the viewmodel?
I’m new to MVVM, I believe I need some enlightenment
You can’t bind directly to a method because
Button(for example) doesn’t have a property that accepts a delegate. Instead, it has aCommandproperty of typeICommand. ARelayCommand(akaDelegateCommand) is just anICommandthat wraps delegates.I see no technical reason why it wouldn’t be possible for the view to bind to specific methods on the view model by way of a markup extension:
However, this would be slower and would increase the coupling between the view and view model. If the view knows only about a property on the view model of type
ICommand, the implementation of that command could change completely (or methods could be renamed) without the view being aware.