J'utilise un WPF ComboBox
dont la valeur IsEditable
est définie sur true. Fondamentalement, j'ai une liste d'éléments affichés dans le ComboBox
. L'utilisateur peut saisir une heure s'il ne trouve pas un moment approprié dans le ComboBox
.WPF - Binding ValidationRules à la propriété Combobox.Text
J'ai attaché une ValidationRule à mon ComboBox.SelectedItem
de sorte que chaque fois que l'utilisateur sélectionne une heure, ma ValidationClass est appelée (dérivée de ValidationRule). Tout cela fonctionne bien.
Étant donné que mon ComboBox
est modifiable, les utilisateurs peuvent entrer leur propre heure. La classe de validation est invoquée chaque fois que je tape une valeur int dans ComboBox
et la valeur qui est passée à cette classe est la valeur que je tape. Maintenant, le problème est, si l'utilisateur tape une valeur qui ne fait pas partie de la comobbox item la classe de validation est invoquée avec une valeur nulle et donc je ne suis pas capable de valider quoi que ce soit.
Quelqu'un peut-il me dire comment valider le ComboBox.Text
article entré par l'utilisateur?
Ma classe Validation:
public class TimeValidateRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
TimeClass timeObj = value as TimeClass;
TimeSpan time;
if(timeObj == null)
return new ValidationResult(false, "Invalid Time");
if(timeObj.Time.Length < 5)
return new ValidationResult(false, "Invalid Time");
try
{
time = TimeSpan.Parse(timeObj.Time);
}
catch
{
return new ValidationResult(false, "Invalid Time");
}
// Get Current time (Arizona time)
if(!CheckAgainstArizonaTime(time))
return new ValidationResult(false, "Invalid Time");
return new ValidationResult(true, null);
}
}
ComboBox
déclaration XAML:
<ComboBox ItemsSource="{Binding Source={StaticResource TimeSelections}}"
ItemTemplate="{StaticResource TimeListTemplate}"
Validation.ErrorTemplate="{StaticResource ValidationTemplate}"
Height="30" Width="100"
Name="cbTimes"
>
<ComboBox.SelectedItem>
<Binding
Path="SelectedTime"
UpdateSourceTrigger="PropertyChanged"
>
<Binding.ValidationRules>
<validators:TimeValidateRule/>
</Binding.ValidationRules>
</Binding>
</ComboBox.SelectedItem>
</ComboBox>
Merci, Jithu
Il devrait y avoir une meilleure solution. Le faire dans le gestionnaire d'événements est un long chemin autour du "bug". –