Как сделать window DialogResult binding через xaml (mvvm)?
Пытаюсь реализовать сабж по статье: MVVM and DialogResult with no code-behind, но у меня всё равно не срабатывает. Кто-нибудь делал что-то подобное? как вы реализуете диалоговые окна? (предпочтительнее без использования всяких wpf-фреймворков)
Foggy Finder,
Спасибо за ссылку на пример, но это не то. В этом примере используется стандартный виндовый диалог, который и так поддерживает DialogResult, я имел в виду что я открываю своё кастомное диалоговое окно и мне надо оттуда вернуть DialogResult.
Space Purr, нет, это просто такая реализация команд для большей гибкости. Полезно если одна и та-же реализация должна быть доступна в разных VM.
Так как пример учебный, то, конечно, он упрощен, но подсказка в комментариях все равно имеется:
//We are dependent on properties provided by MainWindowViewModel so just make sure we
//have that. In production you'd want to abstract this property access away behind an
//interface or perhaps a dedicated viewmodel used to extract information from command
Сам сервис - реализация интерфейса:
public interface IGetFilePathService
{
string GetFilePath(string folder);
}
Такой подход удобен когда нет множества диалоговых окон, страниц.
Если нужна именно навигация, то она может быть реализована в таком виде:
void acceptButton_Click(object sender, RoutedEventArgs e)
{
// Accept the dialog and return the dialog result
this.DialogResult = true;
}
var vm = new DialogVM();
var customDialog = new CustomDialog {
DataContext = vm
};
customDialog.ShowDialog();
if(customDialog.DialogResult.Value)
return new Result(vm.Some);
return null;
Код написан прямо здесь так что вероятны опечатки, но смысл, надеюсь, он передает.