2010-09-29 6 views
0

Voici le problème:Comment puis-je savoir si un certain type a un convertisseur de chaîne attaché?

J'ai une propriété d'un certain objet. Cette propriété est de type t. J'ai besoin de savoir si une valeur de chaîne peut être attachée à cette propriété.

Par exemple: J'ai une instance d'un Windows.Controls.Button. J'ai besoin d'un mécanisme qui retournera true pour la propriété Button.Background, mais false pour Button.Template.

Quelqu'un peut-il aider? Merci beaucoup

+0

'Button' doesn N'avez pas une propriété d'arrière-plan ... voulez-vous dire la propriété 'Text'? –

+0

Eh bien, oubliez Button - Prenez par exemple une grille. Lorsque vous transmettez la valeur de chaîne "# 00556677" à sa propriété Background, elle est convertie en pinceau. Mais vous ne pouvez pas passer une valeur de chaîne à sa propriété Template. C'est ce que j'ai besoin de savoir sur n'importe quelle propriété de n'importe quel objet. – Gal

Répondre

1

Je pense que vous prenez le problème dans la mauvaise direction:

La propriété n'accepte pas directement chaîne: en fait la propriété est convertie en bonne tapez si un convertisseur existe.

Vous pouvez alors regarder si un convertisseur en utilisant ce code existent:

public static bool PropertyCheck(Type theTypeOfTheAimedProperty, string aString) 
{ 
    // Checks to see if the value passed is valid. 
    return TypeDescriptor.GetConverter(typeof(theTypeOfTheAimedProperty)) 
      .IsValid(aString); 
} 

Ces pages peuvent vous intéresser:

  1. http://msdn.microsoft.com/en-us/library/aa970913.aspx
  2. http://msdn.microsoft.com/en-us/library/system.componentmodel.typeconverter.aspx
+0

Merci beaucoup - cela m'a indiqué une bonne direction, bien que le code exact dont j'avais besoin est le suivant: return TypeDescriptor.GetConverter (typeof (theTypeOfTheAimedProperty)). CanConvertFrom (typeof (String)); – Gal

+0

Nice! Amuse-toi bien avec ça :-) –

0
public static bool PropertyCheck(this object o, string propertyName) 
{ 
    if (string.IsNullOrEmpty(propertyName)) 
     return false; 
    Type type = (o is Type) ? o as Type : o.GetType(); 

    PropertyInfo pi = type.GetProperty(propertyName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty); 

    if (pi != null && pi.PropertyType == typeof(string)) 
     return true; 

    return false; 
} 

puis invoquez comme ceci:

object someobj = new Object(); 
if (someobj.PropertyCheck("someproperty")) 
    // do stuff 

ou vous pouvez le faire comme ceci:

Type type = typeof(someobject); 
if (type.PropertyCheck("someproperty")) 

cela a des limites que vous pouvez pas vérifier l'Type tapez lui-même pour les propriétés, mais vous pouvez toujours en faire une autre version si nécessaire.

Je pense que c'est ce que vous vouliez, espérons que cela aide

+0

Cet exemple renvoie true pour toutes les propriétés, dont les types sont des chaînes. Ce n'est pas exactement ce dont j'ai besoin. J'ai besoin de trouver toutes les propriétés, dont la valeur peut être définie en XAML par une chaîne. Voir un exemple que j'ai donné dans un post précédent avec l'arrière-plan et le gabarit. Merci pour la réaction de toute façon – Gal

Questions connexes