小编Saš*_*vić的帖子

WPF命令绑定和输入验证-仅在所有输入均有效时如何启用“保存”按钮

在我的ViewModel中,我实现了IDataErrorInfo接口(以及INotifyPropertyChanged)。输入验证按预期工作,我在那里没有问题。

我将此属性作为IDataErrorInfo的一部分,public string Error { get { return this[null]; } }据我了解,Error如果所有已验证的输入均通过验证,则应为空,因此我将此作为我的CanExecute方法传递

return !string.IsNullOrEmpty(Error);
Run Code Online (Sandbox Code Playgroud)

但是,我的“保存”按钮从未启用。我的CanExecuteChanged猜想是永远不会被触发。如果是这样,我应该在哪里以及如何触发它?


这是我的RelayCommand类。我尝试了其他实现方式,但结果相同。我认为它有效,因为如果不将CanExecute方法传递给构造函数,则会启用“保存”按钮。

public class RelayCommand : ICommand
{
    private readonly Action execute;
    private readonly Func<bool> canExecute;

    public RelayCommand(Action execute, Func<bool> canExecute = null)
    {
        this.execute = execute;
        this.canExecute = canExecute;
    }

    public bool CanExecute(object parameter)
    {
        return canExecute == null || canExecute();      
    }

    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    } …
Run Code Online (Sandbox Code Playgroud)

wpf mvvm idataerrorinfo relaycommand icommand

1
推荐指数
1
解决办法
4320
查看次数

标签 统计

icommand ×1

idataerrorinfo ×1

mvvm ×1

relaycommand ×1

wpf ×1