public async Task<object> Execute( MetroWindow window, object args ) { var dialog = new AddSeriesDialog(); var tcs = new TaskCompletionSource<uint>(); var vm = dialog.DataContext as AddSeriesDialogViewModel; Debug.Assert( vm != null, "vm != null" ); vm.Reset(); vm.CloseRequested += ( s, e ) => { dialog.Close(); tcs.TrySetResult( e.Result != true ? 0 : vm.SelectedSeries.Model.SeriesId ); }; await window.ShowChildWindowAsync( dialog ); return await tcs.Task; }