Я думаю, что использование DialogService - это тяжелый подход.Мне нравится использовать Actions / Lambdas для решения этой проблемы.
Ваша модель представления может иметь это как объявление:
public Func<string, string, dynamic> OpenFileDialog { get; set; }
Затем вызывающая сторона создаст модель представления следующим образом:
var myViewModel = new MyViewModel();
myViewModel.OpenFileDialog = (title, filter) =>
{
var dialog = new OpenFileDialog();
dialog.Filter = filter;
dialog.Title = title;
dynamic result = new ExpandoObject();
if (dialog.ShowDialog() == DialogResult.Ok) {
result.Success = true;
result.Files = dialog.SafeFileNames;
}
else {
result.Success = false;
result.Files = new string[0];
}
return result;
};
Затем вы могли бы назвать это следующим образом:
dynamic res = myViewModel.OpenFileDialog("Select a file", "All files (*.*)|*.*");
var wasSuccess = res.Success;
Такой подход действительно окупается для тестирования.Поскольку ваши тесты могут определять доходность вашей модели представления как угодно:
myViewModelToTest.OpenFileDialog = (title, filter) =>
{
dynamic result = new ExpandoObject();
result.Success = true;
result.Files = new string[1];
result.Files[0] = "myexpectedfile.txt";
return result;
};
Лично я считаю этот подход наиболее упрощенным.Я хотел бы, чтобы мысли других.