Ich habe eine beobachtbare Sammlung einer Klasse, die sowohl BindableBase
als auch IDataErrorInfo
implementiert. Aus meiner Sicht habe ich eine Schaltfläche, deren ICommand
Bindung sollte nur ausführbar sein, wenn jedes Element in der beobachtbaren Sammlung validiert ist. Da eines der Elemente fast immer ungültig wird, ist die Schaltfläche ursprünglich deaktiviert. Ich habe den folgenden Code in meinem Konstruktor:DelegateCommand in Prism, dessen canExecuteMethod durch eine Eigenschaft in einer ObservableCollection bestimmt wird. Wie kann ich weiter "Beobachten" canExecute?
this.StartInspectionCommand = new DelegateCommand(this.StartInspection,() => this.Parameters.All(p => string.IsNullOrEmpty(p["Value"])))
Wo meine beobachtbaren Sammlung ist wie folgt definiert:
public ObservableCollection<Parameter> Parameters { get; } = new ObservableCollection<Parameter>();
Und die Umsetzung von IDataErrorInfo
in meiner Paramter Klasse ist wie folgt:
public string this[string columnName]
{
get
{
if (columnName != "Value" // Only validate value column
|| string.IsNullOrEmpty(this._validationExpression) // No validation means all values including null are valid
|| (this.Value != null && Regex.IsMatch(this.Value, this._validationExpression))) // No null allowed when validating
{
return ""; // No error
}
return this._validationMessage;
}
}
In welcher Syntax wird canExecuteMethod neu ausgewertet, wenn der Benutzer gültige Werte in die verschiedenen Parameter eingibt? (Oder, in der Tat, verursacht derzeit gültigen diejenigen ungültig zu machen.)
Ich verstehe, wie ObservesCanExecute
und ObservesProperty<T>
für Eigenschaften selbst zu verwenden, aber ich bin mir nicht sicher, wie man das auf eine Eigenschaft innerhalb einer Klasse, die Teil ist der ObservableCollection
.
Danke.
Vielen Dank! Deine Methode hat perfekt funktioniert. (Ich habe jedoch einen Lambda-PropertyChangedEventHandler-Ausdruck anstelle einer Methode verwendet.) – GrantA