C# 绑定命令的正确方法

C# 绑定命令的正确方法,c#,wpf,mvvm,data-binding,C#,Wpf,Mvvm,Data Binding,我试图将自己的命令绑定到按钮,但我尝试的任何操作都不起作用 我通过XAML绑定了窗口的DataContext,但是当我尝试绑定到命令时,IntelliSense没有看到它,并且命令没有执行。我试图通过代码隐藏绑定,但也遇到了相同的结果 窗口的绑定如下所示 DataContext="{Binding Source={StaticResource mainViewModelLocator}, Path=Commands}" mainViewModelLocator传递命令类的新实例 命令类: pu

我试图将自己的命令绑定到按钮,但我尝试的任何操作都不起作用

我通过XAML绑定了窗口的
DataContext
,但是当我尝试绑定到命令时,IntelliSense没有看到它,并且命令没有执行。我试图通过代码隐藏绑定,但也遇到了相同的结果

窗口的
绑定
如下所示

DataContext="{Binding Source={StaticResource mainViewModelLocator}, Path=Commands}"
mainViewModelLocator
传递
命令
类的新实例

命令
类:

public ICommand GradeCommand { get; set; }

public Commands()
{
    LoadCommands();
}

private void LoadCommands()
{
    GradeCommand = new CustomCommand(GradeClick, CanGradeClick);
}

private void GradeClick(object obj)
{
    MessageBox.Show("Test");
}

private bool CanGradeClick(object obj)
{
    return true;
}
ICommand

private Action<object> execute;
        private Predicate<object> canExecute;

        public CustomCommand(Action<object> execute, Predicate<object> canExecute)
        {
            this.execute = execute;
            this.canExecute = canExecute;
        }

        public bool CanExecute(object parameter)
        {
            bool b = canExecute == null ? true : canExecute(parameter);
            return b;
        }

        public event EventHandler CanExecuteChanged
        {
            add
            {
                CommandManager.RequerySuggested += value;
            }
            remove
            {
                CommandManager.RequerySuggested -= value;
            }
        }

        public void Execute(object parameter)
        {
            execute(parameter);
        }
执行私有操作;
私有谓词执行;
公共自定义命令(操作执行,谓词canExecute)
{
this.execute=execute;
this.canExecute=canExecute;
}
公共布尔CanExecute(对象参数)
{
bool b=canExecute==null?true:canExecute(参数);
返回b;
}
公共事件事件处理程序CanExecuteChanged
{
添加
{
CommandManager.RequerySuggested+=值;
}
去除
{
CommandManager.RequerySuggested-=值;
}
}
public void Execute(对象参数)
{
执行(参数);
}

我想出来了。我的DataContext绑定不起作用。 我把它改成:

xmlns:vm="clr-namespace:ProgramName.ViewModel"
    <Window.DataContext>
        <vm:Commands/>
    </Window.DataContext>
xmlns:vm=“clr命名空间:ProgramName.ViewModel”