One reason DPs in ViewModels are not good practice is that DependencyProperties within native .NET code, are implemented at the same layer as the control itself. See this example of a custom control
This means that the DefaultKeyStyleProperty is used to tie the code behind (or rather code aside) to the control. I say code aside because within .NET base code and custom control creation, the XAML code definitions cannot be double clicked on
to get to the code behind. The XAML is stand alone code and the Property meta data tying the code to the XAML at run time based on folder naming conventions of the XAML being found in the folder, Themes with a name of Generic.XAML. Wow
that was a mouthful.
DependencyProperites must either live in the Code Behind or (Code Aside), in order for those properites to show up in the designer. If they are put into the ViewModel they just won't show up... But can they go into the View Model? Sure,
just make sure you know why you are doing that...