Does ASP.NET MVC allow private ViewModel constructor?
No, it does not.
If you want to prevent actual code from calling that constructor, you can add [Obsolete("For model binding only", true)]
to a public constructor. This will cause a compiler error if the constructor is explicitly called.