Tôi có một quan sát mà tôi sử dụng để hiển thị một hộp thoại xác nhận, khoảng ký:Hiển thị một Chứng nhận trên cửa sổ gần một cách phản ứng
IObservable<DialogResult> ShowDialog(string title, string message);
Điều này cho thấy người sử dụng hộp thoại, với một yes/no nút kết hợp.
Trong cửa sổ chính của tôi, tôi truy cập vào lễ bế mạc như vậy:
this.Events().Closing.[Do something here]
Tôi muốn để có thể:
- Hiển thị hộp thoại xác nhận khi đóng hoả hoạn quan sát
- Đặt thuộc tính
CancelEventArgs.Cancel
thành true nếu người dùng nhấp vào nút "không".
tôi đã cố gắng thẳng lên đăng ký:
this.Events().Closing.Subscribe(e =>
{
var res = Dialogs.ShowDialog("Close?", "Really Close?").Wait();
e.Cancel = res == DialogResult.Ok;
});
Nhưng đó bị treo vì Wait()
cuộc gọi, tôi cũng đã thử một biến thể async:
this.Events().Closing.Subscribe(async e =>
{
var res = await Dialogs.ShowDialog("Close?", "Really Close?");
e.Cancel = res == DialogResult.Ok;
});
Đó là không có tốt, bởi vì nó chỉ trở lại ngay lập tức.
Những gì tôi thực sự muốn làm là một cái gì đó như:
this.Events().Closing.ThenDo(_ => Dialogs.ShowDialog("Close?", "Really Close?"))
.Subscribe((cancelEventArgs, dialogResult) =>
{
cancelEventArgs.Cancel == dialogResult == DialogResult.Ok;
});
Nhưng điều đó không tồn tại, tôi biết chìa khóa ở đây là làm thế nào tôi kết hợp hai quan sát, nhưng tôi không có ý tưởng làm thế nào để làm như vậy, và các tài liệu hướng dẫn là một chút ánh sáng trên các ví dụ thực tế.