Ho un osservabile che uso per la visualizzazione di una finestra di conferma, più o meno della firma:Mostrando una conferma sulla finestra stretta in un modo reattivo
IObservable<DialogResult> ShowDialog(string title, string message);
Questo mostra all'utente la finestra di dialogo, con un sì/no pulsante combo.
Nella mia finestra principale, che sto l'accesso alla manifestazione di chiusura in quanto tale:
this.Events().Closing.[Do something here]
Voglio essere in grado di:
- visualizzare la finestra di conferma quando la chiusura incendi osservabili
- Impostare la proprietà
CancelEventArgs.Cancel
su true se l'utente fa clic sul pulsante "no".
Ho provato straight-up sottoscrizione:
this.Events().Closing.Subscribe(e =>
{
var res = Dialogs.ShowDialog("Close?", "Really Close?").Wait();
e.Cancel = res == DialogResult.Ok;
});
Ma che pende a causa della chiamata Wait()
, ho provato anche una variante asincrona:
this.Events().Closing.Subscribe(async e =>
{
var res = await Dialogs.ShowDialog("Close?", "Really Close?");
e.Cancel = res == DialogResult.Ok;
});
Che c'è bene, perché ritorna subito.
Quello che voglio veramente fare è qualcosa di simile:
this.Events().Closing.ThenDo(_ => Dialogs.ShowDialog("Close?", "Really Close?"))
.Subscribe((cancelEventArgs, dialogResult) =>
{
cancelEventArgs.Cancel == dialogResult == DialogResult.Ok;
});
Ma che non esiste, so che la chiave qui è nel modo in cui mi unisco i due osservabili, ma non ho idea come farlo, e la documentazione è un po 'di luce su esempi pratici.