.net EventToCommand vs MVVM中的行为

.net EventToCommand vs MVVM中的行为,.net,wpf,mvvm,.net,Wpf,Mvvm,您何时使用接近行为以及何时EventToCommand?我认为,如果要做的工作非常具体,那么最好使用EventToCommand并在ViewModel中实现该工作。当作业可以重用时,最好将功能实现到行为中 已更新: 例如,函数DoPreviewKeyDown: private void DoPreviewKeyDown(KeyEventArgs e) { var view = (TableView)e.Source; if (e.Key =

您何时使用接近行为以及何时
EventToCommand
?我认为,如果要做的工作非常具体,那么最好使用
EventToCommand
并在ViewModel中实现该工作。当作业可以重用时,最好将功能实现到行为中

已更新: 例如,函数
DoPreviewKeyDown

        private void DoPreviewKeyDown(KeyEventArgs e)
    {
        var view = (TableView)e.Source;
        if (e.Key == Key.Tab)
        {
            if (ReferenceEquals(view.Grid.CurrentColumn, view.VisibleColumns[view.VisibleColumns.Count - 1]))
            {
                view.SearchControl.Focus();
                e.Handled = true;
            }
        }
        else if (e.Key == Key.Enter)
        {
            if (OkCommand != null)
                OkCommand.Execute(null);
            e.Handled = true;
        }
        else if ((e.Key == Key.F) && (Keyboard.Modifiers == ModifierKeys.Control))
        {
            view.SearchControl.Focus();
        }
    }
我在我的ViewModel中这样做了。我可以在一个行为中做到这一点,但是这个功能对于这个
网格来说非常特殊。这就是为什么,我认为在我的ViewModel中这样做更好


您认为这种方法有效吗?

许多好问题都会根据专家经验产生一定程度的意见,但对这个问题的回答往往几乎完全基于意见,而不是事实、参考资料或特定专业知识。因此,我投票决定结束你的问题。作为一个快速的回答,我建议使用普通的旧附加属性来做你想做的事情。我可以试着用一个具体的例子来问这个问题。这个网站实际上是针对特定的编程问题,而不是像你的问题仍然在问的那样征求建议。我从来没有说过你应该将EventArgs传递给ViewModel。据我所知,在MVVM Light的EventToCommand中,您必须输入以下参数:
Command
CommandParameter
,在这些参数中,您可以传递任何您想要的内容。但是,在这种特定情况下,您可能希望实现自己的行为操作(如
KeyEventToCommand
),它读取输入键并将其作为参数传递给命令,从而避免ViewModel中的事件参数。在ViewModel中,使用事件聚合器/Messaging发送松散耦合的事件。请注意:上面的代码看起来更像视图逻辑,而不是表示逻辑,这更可能适合后面的UserControls代码,因为您似乎希望扩展TableView的功能,而不是添加“表示逻辑”