Используйте службу:
public void SomeMethodInYourViewModel()
{
try
{
DoSomethingDangerous();
}
catch (Exception ex)
{
ServiceLocator.Resolve<IMessageService>().ShowMessage(ex.Message);
}
}
Теперь вы отключили свои виртуальные машины от представления сообщений. Вы можете даже решить вообще не использовать стандартные (уродливые) окна сообщений, и это не повлияет на ваши виртуальные машины.
Взгляните на превосходный фонд MVVM Джоша Смита на Codeplex . В частности, взгляните на класс Messenger, легкий способ передачи сообщений между различными объектами ViewModel, которым не нужно знать друг о друге.
Кроме того, я не верю, что существует жесткое правило на «Нет кода в представлении», хотя по возможности лучше избегать ... помните, что ваш XAML - это просто код .net, написанный с декларативным синтаксисом; код программной части - это просто C # или VB.