Я создаю приложение, которое основано на MVVM-свету. Я нахожусь в потребности создания нескольких экземпляров того же Представления, и каждый должен связать с его собственным ViewModel.
Значение по умолчанию ViewModelLocator
реализации ViewModels как одиночные элементы, поэтому различные экземпляры того же Представления свяжут с тем же ViewModel.
Я мог создать ViewModel в VMLocator как нестатический объект (как простой как возврат нового VM ()...), но это только частично поможет мне. На самом деле я все еще должен отслеживать открытые окна. Тем не менее, каждое окно могло бы открыть несколько других окон (другого вида, хотя). В этой ситуации я, возможно, должен был бы выполнить некоторую операцию на родительском Представлении и всех его детях. Например, прежде, чем закрыть Представление P, я мог бы хотеть закрыть все его дочерние элементы (представление C1, представление C2, и т.д.).
Следовательно, там какой-либо простой и легкий путь состоит в том, чтобы достигнуть этого? Или есть ли какая-либо лучшая практика, которой Вы были бы совет меня для следования?
Заранее спасибо за Вашу драгоценную справку.
Удачи,
Gianluca.
Нет никаких обязательств по хранению ViewModels как одиночных в ViewModelLocator, но он конечно, их легче найти , если представление тоже одноэлементное . Очевидно, что если у вас есть несколько экземпляров одного и того же класса View, у вас будет несколько экземпляров одного и того же класса ViewModel, и он больше не может быть синглтоном.
Чтобы отслеживать несколько экземпляров ViewModel, вы можете реализовать словарь в ViewModelLocator, который ищет ViewModel в соответствии с ключом. Ключ может быть, например, уникальным идентификатором представления. Как только вы получите представление, получите его ключ, а затем получите модель представления из локатора.
Обновление : Часто вам даже не нужно отслеживать несколько моделей просмотра. Например, вы можете заставить класс Messenger отправлять сообщение всем экземплярам данного класса viewmodel с помощью перегрузки Send.Поэтому, прежде чем внедрять словарь для отслеживания виртуальных машин, спросите себя, действительно ли он вам нужен! ;)
Надеюсь, что это поможет, Лоран