WPF中的命令,实现问题

时间:2010-02-07 23:11:44

标签: c# wpf constructor icommand

我知道我已经就此问了一些问题,但这些问题令人困惑。 我正在做一个关于WPF MVVM模式的教程,但似乎我无法正确使用它,就像在教程中一样,它没有详细介绍如何实现ICommand接口。 (不确定它到底有多正确?!!)

我有以下ICommand实现:

class ViewCommand : ICommand
    {
        #region ICommand Members

        private Predicate<object> _canExecute;
        private Predicate<bool> _execute(object param);

        public ViewCommand(Action<object> action)
        {

        }

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

        public void Execute(object parameter)
        {
            _execute(parameter);
        }

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

        #endregion
    }

现在使用:

class StartViewModel : ViewModel
    {
        public ViewCommand startViewCommand;

        public ViewCommand StartCommand
        {
            get
            {
                if (startViewCommand == null)
                    startViewCommand = new ViewCommand(
                        param => this.StartApplication()); // StartApplication returns void
                return startViewCommand;
            }
        }

我无法弄清楚ViewCommand类的构造函数应该做什么?在StartViewModel类中,它在构造函数中使用了lambda表达式,因此需要有一些委托,但我不确定它与Execute和CanExecute一起使用的意义和方式。我放了一个Action<object>,但这可能不对......

最后,有人可以指点我一个关于如何实现解释它的ICommand的教程吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

看看Josh Smith的tutorial注意继电器命令,他在那里实现它。

答案 1 :(得分:0)

您的_execute代表不应该是Predicate<bool>,而应该是Action<object>。无论如何,为什么不使用像Josh Smith的RelayCommand或MVVM工具包DelegateCommand这样的现有类?

相关问题