【问题标题】:How to auto-close the Caliburn Dialog window?如何自动关闭 Caliburn 对话框窗口?
【发布时间】:2018-05-31 22:02:29
【问题描述】:

我有一个 ViewModel 定义如下

public class PlayerViewModel : Screen, IDiscoverableViewModel

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

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

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

以下是 10 秒后触发的 Timer 滴答事件。

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

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

【问题讨论】:

    标签: wpf dialog window caliburn.micro caliburn


    【解决方案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();
        }
    }
    

    【讨论】:

    • 嗨@Anu,是的,这是有道理的。虽然我从 Screen 派生了弹出视图模型,但我缺少的是在弹出视图模型中使用计时器而不是父视图模型。将计时器滴答移动到弹出视图模型后,它起作用了。谢谢。
    猜你喜欢
    • 2012-04-22
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    相关资源
    最近更新 更多