I suggest forgoing the 1990’s modal dialogs and instead implementing a control as an overlay (canvas+absolute positioning) with visibility tied to a boolean back in the VM. Closer to an ajax type control.
This is very useful:
<BooleanToVisibilityConverter x:Key="booltoVis" />
as in:
<my:ErrorControl Visibility="{Binding Path=ThereWasAnError, Mode=TwoWay, Converter={StaticResource booltoVis}, UpdateSourceTrigger=PropertyChanged}"/>
Here’s how I have one implemented as a user control. Clicking on the ‘x’ closes the control in a line of code in the usercontrol’s code behind. (Since I have my Views in an .exe and ViewModels in a dll, I don’t feel bad about code that manipulates UI.)