2010-06-29 4 views
7

J'ai environ 100 TextBoxes dans un formulaire. J'ai besoin de les valider s'ils sont décimaux par exemple. Cela fonctionne, mais il est trop verbeux, je ne veux pas avoir 800 au lieu de 100 lignes en XAML.Howto WPF Liaison écrite en ligne = forme abrégée

<TextBox.Text> 
    <Binding Path="MyPath" UpdateSourceTrigger="PropertyChanged" Stringformat="{}{0:N}" NotifyOnValidationError="True"> 
     <Binding.ValidationRules> 
      <myRulesNamespace:MyValidationRule ValidationType="decimal" /> 
     </Binding.ValidationRules> 
    </Binding> 
</TextBox.Text> 

Existe-t-il un moyen de le réécrire à la forme courte comme ceci? :

Text="{Binding MyPath, UpdateSourceTrigger='PropertyChanged', StringFormat='{}{0:N}', NotifyOnValidationError=True, ValidationRules NOW WHAT?}" 

Répondre

6

Réponse courte: Vous ne pouvez pas. La propriété Validation-rules est une collection, et il n'existe actuellement aucun moyen de les écrire dans le raccourci Binding.

Vous pouvez cependant créer une classe héritant de liaison, comme ceci:

public class SuperBinding:Binding 
{ 
    public SuperBinding() 
    { 
     UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 
     ValidationRules.Add(new MyValidationRule{ValidationType = typeof(decimal)}); 
     //set rest of properties 
    } 
} 

Et puis utilisez qu'au lieu de l'étiquette de reliure normale.

2

Si vous CONTENUES vos 100 TextBoxes dans un contrôle conteneur de liste, comme un ListBox ou ListView, vous pouvez mettre cette liaison dans un DataTemplate. Ensuite, la règle de validation serait appliquée à chaque élément.

Puisqu'il est possible de réajuster un contrôle de conteneur, vous pourrez toujours obtenir la disposition souhaitée.