2009-08-25 5 views
1

J'ai un contrôle utilisateur doté d'une zone de texte. J'ai essayé d'exposer la propriété Text de texbox en implémentant un DependencyProperty avec le même nom dans le UserControl. Ainsi:Exception Cast non valide lors de la tentative de conversion d'une propriété d'un contrôle utilisateur dans une liaison

public static readonly DependencyProperty TextProperty = 
    DependencyProperty.Register("Text", 
           typeof(string), 
           typeof(UserControlWithTextBox), 
           new UIPropertyMetadata(string.Empty)); 
    public string Text 
    { 
     get { return (string)GetValue(TextProperty); } 
     set 
     { 
      SetValue(TextProperty, value); 
      textBox.Text = value; 
     } 
    } 

La partie get semble fonctionner dans mon application. Cependant, j'ai essayé de lier la propriété IsEnabled d'un bouton à la propriété Text de deux de ces UserControls à l'aide d'un convertisseur qui vérifiera si les propriétés TextControls des deux UserControls sont des chaînes vides. Je reçois l'erreur suivante lorsque la fenêtre de l'application charge:

System.InvalidCastException was unshandled Message = "Impossible de convertir un objet de type MS.Internal.NamedObject en type System.String."

La méthode Convert semble donc:

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     return (string) values[0] != string.Empty && 
       (string) values[1] != string.Empty; 
    } 

valeurs [0] et les valeurs [1] ont tous deux la valeur DependencyProperty.UnsetValue lorsque l'exception est levée.

Où est-ce que je me suis trompé?

Répondre

1

A en juger par votre exception valeurs [0] et valeurs [1] ne sont pas si cordes lorsque vous essayez de les jeter explicitement les pauses. Pour éviter ce genre de choses, vous devriez vraiment lier vos TextBoxes aux propriétés publiques puis lier vos boutons IsEnabled à une autre propriété publique qui dans le getter vérifiera si les TextBox sont vides en vérifiant les propriétés auxquelles ils sont liés.

+0

Merci. Le problème était beaucoup plus simple que je ne le pensais. J'ai oublié de renommer le ElementName = "MyUserControlInstance" après avoir renommé l'instance UserControl lui-même ... – Dabblernl

+0

Parfois, ce sont les petites choses qui vous rendent fou ... oh, je rigole tout le temps .. :) –

Questions connexes