예제 #1
0
파일: Command.cs 프로젝트: iCode-HuangZ/Me
 /// <summary>
 /// 确定此命令是否可在其当前状态下执行的方法。
 /// WPF 中触发 CanExecute 的条件:
 /// 1. 获取键盘焦点时
 /// 2. Execute 调用前
 /// 3. Execute 调用后。
 /// </summary>
 /// <param name="parameter"></param>
 /// <returns></returns>
 public virtual bool CanExecute(object parameter)
 {
     // 仅在第一次获取键盘焦点时,执行 CanExecuteDelegate
     if (IsFirstKeyboardFocus)
     {
         // 备注:使用关键字 async 返回的 Task 会自动执行
         IsCan = CanExecuteDelegate?.Invoke(parameter) ?? true;
         IsFirstKeyboardFocus = false;
     }
     return(Can());
 }
예제 #2
0
 protected override bool CanExecute(object parameter)
 {
     try
     {
         return(CanExecuteDelegate?.Invoke() ?? true);
     }
     catch (Exception ex)
     {
         _registry.HandledException(ex);
         return(false);
     }
 }
        protected override bool CanExecute(object parameter)
        {
            try
            {
                T param = default;
                if (parameter is T TParam)
                {
                    param = TParam;
                }
                else if (parameter != null && ThrowOnInvalidCast)
                {
                    throw new InvalidCastException($"The Command expected a typeof '{typeof(T).FullName}' but recieved a parameter of type '{parameter.GetType().FullName}");
                }

                return(CanExecuteDelegate?.Invoke(param) ?? true);
            }
            catch (Exception ex)
            {
                _registry.HandledException(ex);
                return(false);
            }
        }
예제 #4
0
 /// <summary>
 /// A RelayCommand can always execute.
 /// </summary>
 /// <param name="parameter"></param>
 /// <returns></returns>
 public bool CanExecute(object parameter) => CanExecuteDelegate?.Invoke() ?? true;
 public bool CanExecute(object parameter)
 {
     return(CanExecuteDelegate?.Invoke(parameter) ?? true);
 }