There are a number of ways to implement checkboxes (and nothing to do with MVVM); this one might be the least abstract.
TreeView In WPF[
^]
(And "checking all children" when the parent is checked is a "business rule"; you don't actually have to go around "checking" everything underneath; you use the rule later for whatever).