如何自动关闭 Caliburn 对话框 window?

How to auto-close the Caliburn Dialog window?

我定义了一个 ViewModel

public class PlayerViewModel : Screen, IDiscoverableViewModel

我正在显示一个对话框弹出

var result = await _dialogManager.ShowDialogAsync(item, new List<DialogResult>() { DialogResult.Cancel });

此处 item 是另一个 ViewModel,它显示来自相关视图的 UI。此弹出窗口显示了一些信息,需要在几秒钟后自动关闭,以防用户没有 select 取消按钮。

以下是 10 秒后触发的计时器滴答事件。

void timer_Tick(object sender, EventArgs e)
{
    this.DialogHost().TryClose(DialogResult.Cancel);
}

但它不起作用并抛出异常,因为 this.DialoHost() 总是变得空。我试过 this solution 但它正在关闭整个 ViewModel 而不是我只想关闭对话框 window.

您能否确认您的 'pop-up viewmodel' 是否来自 Screen ?如果是这样,TryClose 应该工作。你能核实一下吗?关闭示例代码。

public class CreatePersonViewModel:Screen
{

    System.Timers.Timer _timer = new Timer(5000);
    public CreatePersonViewModel()
    {

        _timer.Elapsed += (sender, args) =>
        {
            _timer.Enabled = false;
            TryClose(true);
        };
        _timer.Start();
    }
}