У меня есть простое приложение wpf, и я пытаюсь деактивировать кнопку сохранения, если в форме есть ошибки.
Проблема в том, что, хотя проверка выглядит отлично, я не знаю, почемуно я все время получаю ложное значение от метода, который отвечает за проверку ошибок.
Позвольте мне прояснить это, предоставив код.
Это код из MainWindow.Xaml.cs
private readonly HashSet<ValidationError> errors = new HashSet<ValidationError>();
private Lazy<MainWindowViewModel> viewModel;
public MainWindow() {
InitializeComponent();
InitializeValidaton();
}
void InitializeValidaton() {
viewModel = new Lazy<MainWindowViewModel>();
Validation.AddErrorHandler(this, ErrorChangedHandler);
}
private void ErrorChangedHandler(object sender, ValidationErrorEventArgs e) {
if (e.Action == ValidationErrorEventAction.Added) {
errors.Add(e.Error);
} else {
errors.Remove(e.Error);
}
//I set a breakpoint here and it returns the correct value. False if it has errors and True if not
viewModel.Value.IsValid = !errors.Any();
}
Это команда для кнопки
public ICommand SaveItem {
get { return new RelayCommand(SaveItemExecute,CanSaveItem); }
}
private bool CanSaveItem() {
return IsValid;
}
//I set up here a breakpoint and it returns the correct value just once.
//The application looked up on CanSaveItem all the time and except the first time, it returns wrong value
private bool _isValid;
public bool IsValid {
get { return _isValid; }
set {
_isValid = value;
RaisePropertyChanged("IsValid");
}
}
Правила проверки
[Required(ErrorMessage = "Please enter Title")]
[StringLength(100, ErrorMessage = "The maximum length is 100")]
string Name { get; set; }
Я не знаю, имеет ли это смысл, но кнопка, которую я хочу деактивировать, находится в UserControl.
Я не могу понять, почему метод canExecute, который находится вuserControl, сработал более одного раза.Какой бы метод ни использовался, если бы я использовал, он имеет ту же реакцию.Я упоминаю userControl, потому что, если я использую тот же метод (который является частью ICommand) в mainWindow, он срабатывает только один раз
Я буду признателен, если кто-нибудь может мне помочь с этим.
Спасибо