Ваша ViewModel означает, что является связующим звеном между представлением и моделью. Это подразумевает, что, если вы не можете выполнить итерацию модели в целом, она всегда будет состоять из перечисления «клеевых линий».
Единственный беспорядок, от которого я могу себе представить, вы можете избавиться, если вам буквально не нужны свойства XXXCommand
; в этом случае вы можете создать коллекцию свойств-подобных структур (псевдокод)
private void createCommands() {
var commands={
"Logout"=>new RelayCommand(Logout),
"Exit"=>new RelayComand( ()=>Application.Current.Shutdown() ),
....
};
foreach( var key,cmd in commands ){
glue(key,cmd);
}
};
Нет никакой другой причины хранить ссылки на объекты, которые вы здесь создаете, за исключением склеивания их с правильным подшивкой.
Но опять же, почему бы не использовать для этого идиому Собственности? Опять же: количество беспорядка, на мой взгляд, разумно ограничено.