2008-10-26 8 views
0

Ma configuration actuelle lie la propriété Text de mon TextBox à un certain objet Uri. J'adorerais utiliser la validation intégrée de WPF pour détecter les URI invalides, et continuer à partir de là. Mais cela ne semble pas fonctionner?Liaison de données/validation WPF pour les URI?

J'imaginerais qu'il lancerait une exception si je saisissais, par exemple, "aaaa" comme URI. Ainsi, ce qui déclenche ma configuration actuelle, qui est censé détecter les exceptions comme ceci:

<TextBox Grid.Column="1" Name="txtHouseListFile" DockPanel.Dock="Right" Margin="3"> 
    <TextBox.Text> 
     <Binding Source="{StaticResource Settings}" Path="Default.HouseListFile" Mode="TwoWay"> 
      <Binding.ValidationRules> 
       <ExceptionValidationRule /> 
      </Binding.ValidationRules> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 

Alors j'imagine que je pourrais vérifier les différentes propriétés de validation, comme ça?

Validation.GetHasError(this.txtHouseListFile) 

Mais cela ne semble pas fonctionner. Peut-être qu'il ne lance pas d'exceptions en essayant de convertir? Ou peut-être que ma configuration est incorrecte? Corrections à l'un ou l'autre serait génial.

Répondre

1

Vous pouvez essayer de créer notre propre ValidationRule (hériter de ValidationRule). Dans cette classe, remplacez Validate (...) et essayez de créer un objet URI et d'intercepter les exceptions. Dans la capture, définissez simplement le message e.Message to exception.

(je ne suis pas trop sûr quelle est votre source de liaison. Est-ce un objet URI ou une chaîne?)

+0

Ma source de liaison est un objet Uri, pas une chaîne. Donc, pouvez-vous confirmer qu'il n'y a aucun moyen d'utiliser le ExceptionValidationRule intégré? Il semble qu'il devrait lancer une exception UriFormatException lorsque vous essayez d'initialiser l'Uri à partir d'une chaîne invalide ... et ainsi déclencher la règle. – Domenic

0

OK, je pense que je sais ce qui se passe. La liaison ne sait pas comment convertir une chaîne en objet URI (car la propriété textBox Text est une chaîne). Vous avez besoin d'un convertisseur pour l'aider.

Essayez ceci: Créer une classe de conversion (hériter de IValueConverter) que:

  • convertir une chaîne en Uri utilisant le constructeur Uri
  • convertir un Uri en une chaîne (en utilisant l'un des multiples getters)

Mettez votre convertisseur dans la liaison. Ensuite, le convider lancera une exception dans le constructeur Uri et votre ExceptionValidationRule l'attrapera.

Look here pour savoir comment utiliser un convertisseur.

+0

Cela semble assez raisonnable. Je vais le tester ce week-end, et si c'est vrai je marquerai la réponse comme acceptée :). Merci beaucoup! – Domenic

+0

Cela ne semble pas fonctionner (désolé pour le délai énorme). L'exception n'est jamais interceptée. – Domenic