Я всегда обрабатывал подобные вещи в ViewModel
My ParentViewModel
будет содержать экземпляр OpenFileViewModel
, а когда ParentViewModel.SelectFileCommand
выполняется, он вызывает что-то вроде OpenFileViewModel.SelectFile()
Чтобы получить выбранный файл, я часто подписываюсь на OpenFileViewModel.PropertyChanged
и слушаю события изменения в свойстве FileName
, или иногда у меня будет перезаписываемый метод ProcessFile
, который я могу подключитьсобытие для этого будет срабатывать, когда файл будет выбран.
Метод OpenFileViewModel.SelectFile
обычно выглядит примерно так
private void SelectFile()
{
var dlg = new OpenFileDialog();
dlg.DefaultExt = this.Extension;
dlg.Filter = this.Filter;
if (dlg.ShowDialog() == true)
{
var file = new FileInfo(dlg.FileName);
FileName = file.FullName;
if (ProcessFileDelegate != null)
ProcessFileDelegate()
}
}
, а мой ParentViewModel
часто будет содержать код, похожий на этот:
public ParentViewModel()
{
this.OpenFileDialog = new OpenFileViewModel();
this.OpenFileDialog.PropertyChanged += OpenFileDialog_PropertyChanged;
this.OpenFileDialog.ProcessFileDelegate = ProcessFile;
}