<TextBox [...] Text="{Binding SearchString}"/> which I made sure already works) using a button's CommandParameter. The relevant button code is as follows (I've hidden layout arguments) PerformSearch is a property of the class MainViewModel that I have defined as a custom classparameter is null. If I pass a string directly instead of using a binding, I do get the string as an outputCommandParameter="Binding" and pass the whole ViewModel, and it does indeed pass the whole viewmodel, but I feel like it defeats the purpose of having a separate class handle the command.