C# 从用户控件中xaml的“我的依赖项”属性为我的视图模型赋值

C# 从用户控件中xaml的“我的依赖项”属性为我的视图模型赋值,c#,wpf,xaml,C#,Wpf,Xaml,我需要捕获一个按键事件,以从自定义DataGrid `公共类ExtendedDataGrid:DataGrid{}获取键值,并让它在我的视图模型中使用按下的键触发一个事件。确切地说,我想检查是否有人按了Delete键,然后在不使用代码隐藏的情况下从当前选定的中删除记录,因为我的所有逻辑都在我的视图模型中 我的ExtendedDataGrid控件是新控件,我创建了一个GridColumns集合(我自己的类定义),它从视图模型中设置列,并在视图模型将值发送到DependencyProperty的位置

我需要捕获一个按键事件,以从自定义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=keythaswapsed}”。这在Key类型的my view模型中声明为公共属性

我希望按键会触发我创建的事件,它会触发,然后将值发送到Dependency属性,并让它通知视图模型中的更改/值,而它不会


一旦我明白了这一点,其他一切都会到位,因为我学得很快。我只是缺少一些基本的东西。任何帮助都将是巨大的。一旦我掌握了足够的知识,我可能会开始回答关于这个主题的其他新手问题。

当您将VM绑定到ExtendedDataGrid时,请尝试将绑定模式设置为双向

KeyDownValue="{Binding Path=KeyThatWasPressed, Mode=TwoWay}"

我喜欢这个网站。另一个问题得到了回答。多简单啊。谢谢。