从CodeBehind绑定到VM的RelayCommand

Hou*_*man 8 .net wpf mvvm relaycommand mvvm-light

我想知道我是否可以像这样在我的ViewModel上创建一个RelayCommand:

public RelayCommand<IList<VectorViewModel>> MyCommand { get; set; }
Run Code Online (Sandbox Code Playgroud)

构造函数:

MyCommand = new RelayCommand<IList<VectorViewModel>>(DoSomething);
Run Code Online (Sandbox Code Playgroud)

从XAML背后的代码中,我从DataGrid中获取所选行并将它们放入List中.

if (xamDatagridVector.SelectedItems.Records.Count >= 3)
{
                var list = new List<VectorViewModel>();
                foreach (DataRecord record in xamDatagridVector.SelectedItems.Records)
                {
                    list.Add((VectorViewModel)record.DataItem);
                }
}
Run Code Online (Sandbox Code Playgroud)

在这个阶段,我想通过使用我之前创建的RelayCommand将List发送回ViewModel.是否可以在代码中创建一个RelayCommand并将其绑定到ViewModel的命令并将其关闭?

有什么替代方式?我当然可以在MVVM-Light中使用弱引用的Messenger类,但是我不喜欢的是它会将它发送给该调用的所有订阅者,而不仅仅是底层的ViewModel(当你有几个时它使用Messenger是致命的TabControls中相同View的实例)

我希望有人有想法让我继续前进,非常感谢,Kave

Tho*_*que 18

Execute检查结果后,只需调用命令的方法CanExecute:

var viewModel = (MyViewModel)DataContext;
if (viewModel.MyCommand.CanExecute(list))
    viewModel.MyCommand.Execute(list);
Run Code Online (Sandbox Code Playgroud)