Обычно сначала используют viewmodel и приложение с одним окном, а не несколько окон со своими собственными моделями представления.
Частично, поскольку пользователям довольно легко «потерять» несколько окон. Он также закрывает ряд случаев проблем совместного использования, когда у вас открыто окно X и когда вы открываете окно Y, происходит конфликт обработки.
Имея то, что у вас есть, одним простым способом решения этой проблемы является использование SimpleIOC для предоставления ваших моделей представления.
SimpleIOC дает вам синглтоны для всего, что вы просите.
Возможно, вы видели код:
SimpleIoc.Default.GetInstance<vmType>();
Который, конечно, имеет определенный тип в этих угловых скобках.
Альтернатива:
SimpleIoc.Default.GetInstance(vmType);
Где vmType может быть переменной. Переменная типа, которая соответствует форме желаемой модели представления.
Вы можете создать расширение разметки, которое принимает тип в качестве параметра и выполняет этот вызов, возвращая модель представления.
Я не пробовал, но я не думаю, что вам даже нужно регистрировать тип с использованием этого синтаксиса.