The actual problem as to why this is not working is described here.
However, the given solution to create a throwing setter to pass the validation would not work in your case.
I think it's ok to call a method on the ViewModel. If that's the code behind part that bugs you, perhaps you can use interactivity to call a method based on an event trigger (SizeChanged).