绑定命令的正确方法

时间:2019-06-29 10:12:36

标签: c# wpf mvvm data-binding

我正在尝试将我自己的命令绑定到按钮,但是我所做的都无法正常工作。

我通过xaml绑定了窗口数据上下文,但是当我尝试绑定到我的命令Intellisense时,甚至都看不到它并且命令没有执行。我也尝试通过代码隐藏来绑定同样的结果。

我的窗口数据绑定看起来像这样。

DataContext="{Binding Source={StaticResource mainViewModelLocator}, Path=Commands}"

mainViewModelLocator传递Commands类的新实例。

Commands类:

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);
        }

1 个答案:

答案 0 :(得分:0)

我知道了。我的DataContext绑定无效。 我将其更改为:

xmlns:vm="clr-namespace:ProgramName.ViewModel"
    <Window.DataContext>
        <vm:Commands/>
    </Window.DataContext>