EventToCommand vs InputBindings问题

时间:2011-07-07 01:58:16

标签: wpf c#-4.0 mvvm-light

我已经创建了一个解决方案来重现我在MVVM-Light EventToCommand和InputBindings中遇到的问题。问题围绕一个窗口打开另一个窗口,如果我连接了一个InputBinding,说出转义键并关闭第二个视图,它会关闭第二个视图并返回第一个视图。如果我使用EventToCommand然后手动调用相同的命令它关闭第二个视图,它也会关闭第一个视图。

我希望在没有代码的情况下有点难以看到,所以我创建了一个测试解决方案来重现问题。

步骤如下:

按预期工作

1)点击第一个窗口的按钮打开第二个窗口。

2)按第二个上的退出键以使用输入绑定

问题案例

1)点击第一个窗口的按钮打开第二个窗口。

2)单击“Hello”文本框 3)按Esc键以使用EventToCommand路径并关闭两个窗口?

Example Solution

2 个答案:

答案 0 :(得分:1)

您必须通知WPF事件处理机制,在您的事件处理程序中处理按钮按下并且不应该在事件链中冒泡。如果你没有,你的文本框在活动窗口(window2)上调用close,并且转义处理程序在活动窗口上调用close(window1,因为window2已经被文本框的转义处理程序关闭)。因此,如果您修改Close2函数,如下所示一切正常:

    public void Close2(KeyEventArgs e)
    {
        if (e.Key == Key.Escape)
            Close();
        e.Handled = true;
    }

答案 1 :(得分:0)

我认为问题是因为您在EventToCommand侦听器中挂接了 PreviewKeyDown 事件。我认为它是在KeyUp和KeyPress事件触发之前对键关闭和关闭窗口作出反应。这意味着KeyUp和KeyPress将在主窗口上触发,主窗口通过关闭来响应。

我在您的示例中将EventName更改为 PreviewKeyPress ,这似乎解决了这个问题。我能够按Escape并让它关闭顶部窗口。