代码之家  ›  专栏  ›  技术社区  ›  thepaulpage

i命令和委托命令的“canexecuteMethod”为什么不适用于我们?

  •  4
  • thepaulpage  · 技术社区  · 16 年前

    我们正在尝试使用ICommand在带Prism的Silverlight中设置按钮。我们希望这个按钮偶尔能被禁用。delegatecommand有两个参数,“executeMethod”和“canexecuteMethod”

    当我们设置ICommand时,我们期望如果使用“canExecuteMethod”,那么将调用它来查看是否可以调用“ExecuteMethod”。按钮的启用状态应反映“canExecuteMethod”的结果。

    我们实际看到的是: 创建表单时,将调用方法并启用或禁用按钮。(在这种情况下,启用) CanExecuteMethod永远不会被再次调用,即使我们试图设置行为以防止发生这种情况,Execute方法也将激发。执行被抛出(我们想要避免的)。

    显而易见的答案是,我们应该称之为:

    OnPropertyChanged("SaveCommand");
    

    但我们做错事了。要么我们假设它是以一种不起作用的方式工作,要么我们错过了一步。有什么想法吗?

    代码:

    SaveCommand = new DelegateCommand<string>(OnSaveCommand, CanSave);
    
    public void OnSaveCommand( string helpNumber )
            {
                OnPropertyChanged("SaveCommand");
               //DoSaveStuff
            }
    
            public bool CanSave(Object sender)
            {
                return Model.CanSave();// true or false depending
            }
    
    1 回复  |  直到 16 年前
        1
  •  8
  •   Jeremiah    16 年前

    由于savecommand是一个delegatecommand,因此它具有一个名为raisecanecuetechanged()的函数。

    调用此函数时,它将从cansave函数刷新控件。

    delegateCommands的onPropertyChanged等于myCommand.raiceCanneceSecureChanged。

    玩得高兴!