【发布时间】:2015-12-18 00:08:15
【问题描述】:
我在我的 WPF 项目中使用 MVVM 模式,现在我遇到了标题中提到的问题。我发现一些建议是像这样使用KeyEventArgs.Handled = true;:
private void PreviewKeyDown(object sender, KeyEventArgs e)
{
if ((e.Key.Equals(Key.Enter)) || (e.Key.Equals(Key.Return)))
{
e.Handled = true;
}
}
但我想在 ViewModel 中编写它,而不是 View 的代码隐藏。这个example 展示了使用MVVM 模式处理Key Event 的方法,但我不知道如何传递KeyEventArgs 参数以供使用。
谁能帮助我? 这是最好的方法吗?
任何建议或建议将不胜感激。
提前致谢。
【问题讨论】:
-
所有与控件交互的事件代码都应该保留在视图中。无论您如何显示数据,ViewModel 都应该是相同的。如果使用 Datagrid,ListView 或 TextBox 则不是 ViewModel 需要考虑的问题。
-
初衷是对的。在您的视图模型中,您可以编写值发生变化时会发生的情况。但是价值观是否改变应该是一个观点的问题。你想在
DataGrid中进行编辑吗?否则,您可以禁用它,如下所示:stackoverflow.com/a/6766500/4424024 -
我明白,如果我在视图(xaml)中为控件声明一个事件,然后在代码隐藏(xaml.cs)中自动生成一个事件处理程序,但使用 MVVM,代码隐藏,它会起作用不允许(这是规则),我的 DataGrid 可以编辑。
标签: c# wpf mvvm datagrid keyboard-events