如何自动关闭Caliburn对话框窗口?

时间:2018-05-31 22:02:29

标签: wpf dialog window caliburn.micro caliburn

我有一个像

定义的ViewModel
public class PlayerViewModel : Screen, IDiscoverableViewModel

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

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

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

以下是在10秒后被解雇的Timer tick事件。

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

但是它没有工作并抛出异常,因为 this.DialoHost()总是变为null。我尝试了this solution,但它关闭了整个ViewModel,而我只想关闭对话框窗口。

1 个答案:

答案 0 :(得分:1)

你能否确认你的'弹出式视图模型'是否来自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();
    }
}