Я думаю, что все остальные, которые используют IDialogService или фактически создают свои собственные диалоги, перешли к разработке проблемы. Мне очень нравится упрощенный подход использования Funcs. Вот пример. Сначала добавьте это в вашу ViewModel:
public abstract class ViewModelBase : INotifyPropertyChanged
{
/** Other ViewModel Code *//
public Func<string, string, bool> OkCancelDialog { get; set; }
}
Затем, когда вы создаете экземпляр своего производного класса вашей ViewModel, вы просто присоединяете следующий код: (Я обычно делаю это при запуске, как Program.cs)
var myVM = new SomeSuperViewModel();
myVM.OkCancelDialog = (msg, caption) => MessageBox.Show(msg, caption, MessageBoxButton.OkCancel) == MessageBoxResult.OK;
В вашем текущем коде ViewModel все, что вам нужно сделать, это позвонить:
if (OkCancelDialog("Some crazy message.", "Caption"))
//do something if true
else
//else do something if false
В ваших юнит-тестах вы можете сделать это:
var myVMToTest = new SomeSuperViewModel();
myVMToTest.OkCancelDialog = (msg, caption) => true; //could be false too if you need to test that functionality.
Я предпочитаю этот подход, так как его просто и легко проверить. Что думают другие?