我需要捕获一个按键事件以从我的自定义DataGrid`公共类ExtendedDataGrid:DataGrid {}获取键值,并使用按下的键在我的视图模型中触发事件。确切地说,我想检查是否有人按下Delete键,然后从当前选中的记录中删除记录而不使用后面的代码,因为我的所有逻辑都在我的视图模型中。
我的ExtendedDataGrid控件是新的,我创建了一个GridColumns(我自己的类定义)的集合,它从视图模型中设置列,并且在视图模型将值发送到DependencyProperty的位置。但是,这次我想从PreviewKeyDown捕获键盘输入并将其发送到视图模型。
我在我的ExtendedDataGrid类中创建了一个方法并放在构造函数中:PreviewKeyDown += OnKeyDown
;这会按预期触发事件。我创建了一个DependencyProperty:
public static readonly DependencyProperty KeyDownValueProperty =
DependencyProperty.Register("KeyDownValue", typeof(Key), typeof(ExtendedDataGrid), null, null);
然后我创建了一个方法:
private void OnKeyDown(object Sender, KeyEventArgs Args)
{
SetValue(KeyDownValueProperty, Args.Key);
}
然后我声明了属性包装器:
[Bindable(true)]
public Key KeyDownValue
{
get
{
return (Key)GetValue(KeyDownValueProperty);
}
set
{
SetValue(KeyDownValueProperty, value);
}
}
我做的最后一件事是添加XAML,KeyDownValue =“{Binding Path = KeyThatWasPressed}”。这在Key类型的视图模型中声明为公共属性。
我希望按下该键会触发我创建的事件,然后将其发送到依赖项属性并让它通知我的视图模型中的更改/值,而不是。
一旦我得到了这个,那么其他一切都将落实到位,因为我是一个快速学习者。我只是缺少一些基础知识。任何帮助都会很大。一旦我学到了足够的知识,我很可能会开始回答关于这个问题的其他新手问题。
答案 0 :(得分:1)
将VM绑定到ExtendedDataGrid时,请尝试将绑定模式设置为TwoWay
KeyDownValue="{Binding Path=KeyThatWasPressed, Mode=TwoWay}"