Entwickler-Ecke
WPF / Silverlight - XAML ValidationRules im ViewModel CanExecute verwenden
RobAll - Do 08.04.21 11:38
Titel: XAML ValidationRules im ViewModel CanExecute verwenden
Hallo Zusammen,
Im XAML nutze ich zur Validierung einer Adresse
XML-Daten
1: 2: 3:
| <Binding.ValidationRules> <vr:AdressValidationRule /> </Binding.ValidationRules> |
C#-Quelltext
1: 2: 3: 4: 5:
| public class AdressValidationRule : ValidationRule { } |
Diese Validierung möchte ich nun im ViewModel "CanExecute" eines CommandBinding nutzen.
Die Lösung über XAML Has Error will ich nicht verwenden
XML-Daten
1:
| <DataTrigger Binding="{Binding ElementName=Adresse, Path=(Validation.HasError)}" |
Kann ich den Error aus dem XAML ins ViewModel binden und für das CanExecute verwenden?
Welche Lösung verwendet ihr?
Danke vorab
Rob ALL
Moderiert von Th69: XML-Tags hinzugefügt
Moderiert von Th69: C#-Tags hinzugefügt
RobAll - Fr 09.04.21 16:21
Th69 erstmal danke..
Dein Vorschlag funktioniert fast..
Die Validation Rule verhindert einen korrupten Wert in der gebundenen Eigenschaftsmethode, erstmal gut, aber die "
e.CanExecute = true" bleibt
true.
- Wie kann ich explizit einen korrupten Wert über XAML ins ViewModel Feld binden, um mit dem Command zu arbeiten?
Irgendwie widerspricht sich das? Gibt es noch eine andere Möglichkeit zu meiner ursprünglichen Frage?
- Die ValidationRule erwartet als zweites Argument CultureInfo hier übergebe ich null -> Für was wird diese benötigt?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| private void OpenCanExecute(object sender, CanExecuteRoutedEventArgs e) { if (AdressValidationRule.Validate(Adress, null).IsValid) { e.CanExecute = true; } else { e.CanExecute = false; } } |
Moderiert von Th69: C#-Tags hinzugefügt
RobAll - Fr 09.04.21 18:19
Hallo Th69
Die Validation Rule lässt nur einen gültigen Wert im Setter
zu:
C#-Quelltext
1: 2: 3:
| set { SetProperty(ref _Adress, value); } |
ungültige Werte werden nicht ins Modell geupdatet. Erstmal gut, aber
wie kann
e.CanExecute des Commands reagieren, wenn die Eigenschaft "Adress" nur gültige Werte annimmt?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| private void OpenCanExecute(object sender, CanExecuteRoutedEventArgs e) { if (AdressValidationRule.Validate(Adress, null).IsValid) { e.CanExecute = true; } else { e.CanExecute = false; } } |
Moderiert von Th69: C#-Tags hinzugefügt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!