2009-09-09 7 views
3

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

Répondre

0

vous devez gérer le code et les exceptions à l'aide gestionnaire d'événements, etc vérifier la net pour d'autres échantillons

+1

Il devrait y avoir une meilleure solution. Le faire dans le gestionnaire d'événements est un long chemin autour du "bug". –

4

Je sais qu'il est trop tard, mais peut-être cela aidera quelqu'un: Bind à Text propriété de ComboBox, au lieu de SelectedItem

0
<ComboBox Name="myComboBox">          
    <ComboBox.Text> 
     <Binding Path="SelectedTime" UpdateSourceTrigger="PropertyChanged"> 
      <Binding.ValidationRules> 
       <validators:TimeValidateRule/>              
      </Binding.ValidationRules> 
     </Binding> 
    </ComboBox.Text> 
</ComboBox> 
Questions connexes