Нет необходимости хранить ViewModel как синглтоны в ViewModelLocator, но это, безусловно, облегчает их поиск , если представление тоже одиночное . Очевидно, что если у вас есть несколько экземпляров одного и того же класса View, у вас будет несколько экземпляров одного и того же класса ViewModel, и он больше не может быть одиночным.
Чтобы отслеживать несколько экземпляров ViewModel, вы можете реализовать словарь в ViewModelLocator, который ищет ViewModel в соответствии с ключом. Ключом может быть, например, уникальный идентификатор для представления. Как только вы получите представление, извлеките его ключ, а затем извлеките модель представления из локатора.
Обновление : Зачастую вам даже не нужно отслеживать несколько моделей просмотра. Например, вы можете сделать так, чтобы класс Messenger отправлял сообщение всем экземплярам данного класса viewmodel, используя перегрузку Send. Поэтому, прежде чем использовать словарь для отслеживания виртуальных машин, спросите себя, действительно ли он вам нужен! ;)
Надеюсь, это поможет,
Laurent