MVVM should avoid referencing presentation assemblies from your view models. You need to call the new window from your view model, so how do you break the dependency?
The same way we break every dependency - an interface!
I usually call this an interaction service as a window is an interactivity object. There may be varying opinions on this. YMMV etc.
public interface IDataInteractionService
{
//Implementations will display the data SOMEHOW
void DisplayData(Data d);
}
And now the implementation
//Displayed data using windows!
public class WindowedDataInteractionService: IDataInteractionService
{
public void DisplayData(Data d)
{
new Window().ShowDialog(); //basic implementation shows a window.
}
}
The trick here is that your view model does not reference any WPF assemblies directly - this is called indirection. As a bonus, you have an interface so swapping the service implementation is possible with confidence that you wont break the view model code. This is an example of SOLID principles making life easier for future you.
You are not using PRISM or other Dependency Injection Framework, so a challenge for you will be getting the service to your view model. Common practice is to use a Singleton implementation to make your IDataInteractionService
avaliable to the application.