2009-04-01 9 views
0

J'utilise WPF et j'ai une classe de données que je lie à DependencyProperties d'un contrôle. J'ai besoin de changer la liaison au moment de l'exécution sous le contrôle d'un utilisateur. Idéalement, je voudrais pouvoir faire quelque chose comme çaModification de la propriété DependencyProperty que je lie à l'exécution

myControl.SetBinding(UserControl.GetDependencyProperty("HeightProperty") 
    , myBinding); 

Bien sûr GetDependencyProperty prenant une chaîne ne fonctionne pas, je l'ai eu le temps en créant ma propre classe statique

 public static DependencyProperty GetDP(string Name) 
     { 
      switch (Name) 
      { 
       case "Height": return UserControl.HeightProperty; 
       case "Width": return UserControl.WidthProperty; 
.... 
      } 

Y a-t-il un meilleur moyen?

Répondre

1

Vous n'avez pas décrit comment l'utilisateur modifie la propriété de dépendance cible. Pouvez-vous simplement stocker les DependencyProperty s eux-mêmes plutôt que string s? De cette façon, vous n'avez aucune conversion à effectuer. Pseudo-code:

//just an array of all allowable properties 
public DependencyProperty[] AllowedProperties { get; } 

//the property the user has chosen 
public DependencyProperty ChosenProperty { get; set; } 

//called whenever ChosenProperty changes 
private void OnChosenPropertyChanged() 
{ 
    //redo binding here, using ChosenProperty as the target 
} 

Modifier après les commentaires: Vous pouvez utiliser DependencyPropertyDescriptor.FromName pour obtenir un DependencyProperty de son nom, en supposant que vous connaissez le type du propriétaire:

var descriptor = DepedencyPropertyDescriptor.FromName(nameFromExcel, typeof(YourUserControl), typeof(YourUserControl)); 
var dependencyProperty = descriptor.DependencyProperty; 
+0

L'utilisateur pour divers Les raisons vont conduire à partir d'Excel, d'où la nécessité de convertir une chaîne, le contenu d'une cellule Excel en un DP. J'aime votre idée AllowedProperties, mais aura toujours le problème avec ChosenProperty. – MrTelly

+0

Je vois. J'ai mis à jour mon message en conséquence. –

+0

Cest exactement ce que je cherchais. BTW Votre code Resizer m'a aidé à sortir d'un trou un certain temps - merci encore – MrTelly

Questions connexes