MVVM следует избегать ссылок на сборку презентаций из ваших моделей просмотра. Вам нужно вызвать новое окно из вашей модели представления, так как вы нарушаете зависимость?
Точно так же мы ломаем каждую зависимость - интерфейс!
Обычно я называю это услугой взаимодействия , поскольку окно является объектом интерактивности. На это могут быть разные мнения. YMMV и т.д.
public interface IDataInteractionService
{
//Implementations will display the data SOMEHOW
void DisplayData(Data d);
}
А теперь реализация
//Displayed data using windows!
public class WindowedDataInteractionService: IDataInteractionService
{
public void DisplayData(Data d)
{
new Window().ShowDialog(); //basic implementation shows a window.
}
}
Хитрость здесь в том, что ваша модель представления не ссылается ни на WPF сборки непосредственно - это называется косвенность. В качестве бонуса у вас есть интерфейс, поэтому смена версии сервиса возможна с уверенностью, что вы не нарушите код модели представления. Это пример принципов SOLID, облегчающих жизнь для вас в будущем.
Вы не используете PRISM или другое Радиус впрыска Dependency, поэтому вызов для вас будет получать обслуживание к вашей модели просмотра. Общая практика заключается в использовании Singleton, чтобы сделать ваш IDataInteractionService
доступным для приложения.
Вот пример того, как вы должны это сделать: http: // stackoverflow.com/questions/16652501/open-a-new-window-in-mvvm –