2

これについてはすでに質問したことは知っていますが、混乱を招くだけです。私は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、コンストラクターでラムダ式を使用しているため、デリゲートが必要ですが、何をどのように Execute および CanExecute と連携させるのかわかりません。を入れましたAction<object>が、おそらく間違っています...

最後に、それを説明する ICommand の実装方法に関するチュートリアルを教えてもらえますか?

ありがとう!

4

2 に答える 2

3

Josh Smithのチュートリアルを見て、彼が実装しているリレーコマンドに注意してください。

于 2010-02-07T23:26:51.880 に答える
0

あなたの_executeデリゲートは であってはならずPredicate<bool>、 であるべきAction<object>です。RelayCommandとにかく、Josh Smith のや MVVM toolkitのような既存のクラスを使用しないのはなぜDelegateCommandですか?

于 2010-02-07T23:46:24.830 に答える