2009-04-01 9 views
0

Ich verwende WPF und habe eine Datenklasse, die ich an DependencyProperties eines Steuerelements binde. Ich muss die Bindung zur Laufzeit unter der Kontrolle eines Benutzers ändern. Im Idealfall ist Ich möchte in der Lage sein, etwas wie diesesÄndern, an welche DependencyProperty ich zur Laufzeit biniere

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

Natürlich GetDependencyProperty zu tun, um eine Zeichenfolge nehmen nicht arbeiten, ich habe meine eigene statische Klasse um diese bekam, indem

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

Gibt es einen besseren Weg?

Antwort

1

Sie haben nicht beschrieben, wie der Benutzer die Zielabhängigkeitseigenschaft ändert. Können Sie einfach die DependencyProperty s selbst statt string s speichern? Auf diese Weise müssen Sie überhaupt keine Konvertierung vornehmen. 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 
} 

bearbeiten nach Kommentare: Sie können DependencyPropertyDescriptor.FromName verwenden, um eine DependencyProperty aus seinem Namen zu bekommen, vorausgesetzt, Sie die Art des Besitzers kennen:

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

Der Benutzer für verschiedene Gründe dafür werden von Excel getrieben, daher muss ein String, der Inhalt einer Excel-Zelle in ein DP konvertiert werden. Ich mag Ihre AllowedProperties-Idee, habe aber weiterhin das Problem mit ChooseProperty. – MrTelly

+0

Ich verstehe. Ich habe meinen Beitrag entsprechend aktualisiert. –

+0

Das war genau was ich suchte - Prost. BTW Dein Resizer-Code hat mir vor einiger Zeit aus einem Loch geholfen - danke nochmal – MrTelly

Verwandte Themen