내 ViewModel에서 IDataErrorInfo 인터페이스를 구현했습니다 (INotifyPropertyChanged와 함께). 입력 유효성 검사가 의도 한대로 작동하지만 문제가 없습니다.입력 유효성 검사를 사용하는 WPF 명령 바인딩 - 모든 입력이 유효한 경우에만 "저장"단추를 활성화하는 방법
나는 모든 검증 입력이 유효성 검사를 통과하면 Error
가 비어 있어야합니다, 나의 이해에 IDataErrorInfo public string Error { get { return this[null]; } }
의 일환으로이 속성을 가지고, 그래서 난 내 CanExecute 방법
return !string.IsNullOrEmpty(Error);
하지만, 내 "저장"버튼으로이 통과 활성화되지 않습니다. 제 말은 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; }
}
public void Execute(object parameter) { execute(); }
}
"저장"버튼 :
<Button Content="Save" Command="{Binding InsertCommand}"/>
에 InsertCommand : 뷰 모델의 생성자에서
public RelayCommand InsertCommand { get; internal set; }
:
InsertCommand = new RelayCommand(ExecuteInsert, CanExecuteInsert);
CanExecute :
bool CanExecuteInsert()
{
return !string.IsNullOrEmpty(Error);
}
삽입 명령 표시 초기화 된 방법 및 해당 CanExecute –
@lll 끝에 추가했습니다. –