在用户控件中从xaml的依赖项属性为我的视图模型分配值

时间:2011-04-25 12:13:38

标签: c# wpf xaml

我需要捕获一个按键事件以从我的自定义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类型的视图模型中声明为公共属性。

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

一旦我得到了这个,那么其他一切都将落实到位,因为我是一个快速学习者。我只是缺少一些基础知识。任何帮助都会很大。一旦我学到了足够的知识,我很可能会开始回答关于这个问题的其他新手问题。

1 个答案:

答案 0 :(得分:1)

将VM绑定到ExtendedDataGrid时,请尝试将绑定模式设置为TwoWay

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