0

我有点坚持正确使用Telerik.Windows.Controls DelegateCommand

我有以下设置,可以编译,但我更关心的是,我是否正确使用它。我已经在 Online Doc 中搜索了一段时间,但找不到任何示例。

特别是,我对如何使用CanSaveAuthorization或底层CanExecute以及如何处理所需的 object 参数感到困惑。

谢谢,

    public class CreateAuthorizationViewModel : ViewModelBase
    {
        private Authorization authorization;
        private AuthorizationRepository authorizationRepository;
        private DelegateCommand saveAuthorizationCommand;

        public DelegateCommand SaveAuthorizationCommand
        {
            get
            {
                return saveAuthorizationCommand;
            }
        }

        public CreateAuthorizationViewModel()
        {
            InitializeCommand(); 
        }

        private void InitializeCommand()
        {
            saveAuthorizationCommand = new DelegateCommand(SaveAuthorization, CanSaveAuthorization);           
        }

        private void SaveAuthorization(object parameter)
        {
            authorizationRepository.Save();
        }

        private bool CanSaveAuthorization(object parameter)
        {
            //I would have validation logic here
            return true;
        }
    }
4

2 回答 2

2

DelegateCommand实现ICommand接口。这意味着它可以绑定到 WPF 控件的 Command 属性,例如Button. CanExecute 方法(在您的情况下为 CanSaveAuthorization)可以评估是否允许执行 Execute 方法(在您的情况下为 SaveAuthorization),如果没有,则该按钮将在视图中被禁用。type 的参数在object这里可能会有所帮助。我从未使用过 Telerik 的实现,但我认为这是CommandParameter可以在视图中设置的控件属性的值。如果您有一个始终返回 true 的 CanExecute 方法,那么您不妨将其全部删除。

如果您使用 google 搜索,您可能会找到更多信息和示例RelayCommand。这大概是 Telerik 所基于的模式DelegateCommand。我的版本DelegateCommand有一个没有parameter参数的重载。然后 CanExecute 方法需要视图模型中可用的信息来确定 CanExecute 状态。

于 2013-02-02T10:19:54.233 回答
0

这有点废话,但您可以摆脱对 InitializeCommand 函数的需要:

public DelegateCommand SaveAuthorizationCommand
{
    get
    {
        return saveAuthorizationCommand ??
               (saveAuthorizationCommand = new DelegateCommand(SaveAuthorization, CanSaveAuthorization));
    }
}
于 2013-02-05T14:27:05.537 回答