2008-11-06 6 views
6

Je ne sais pas si c'est même possible, mais j'ai pensé que je demanderais. Tout d'abord, pour mes besoins, je demande que cela fonctionne dans la partie C# et non dans la partie XAML. Voilà ce que je l'ai et il fonctionne:La source de liaison est une chaîne avec le chemin d'accès à la propriété

public partial class MyClass1 : Window 
{ 
    public MyClass2 MyClass2Object { get; set; } 

    public MyClass1() 
    { 
      InitializeComponent(); 
      MyClass2Object = new MyClass2(); 
      Binding binding = new Binding(); 
      binding.Source = MyClass2Object; 
      binding.Path = new PropertyPath("StringVar"); 
      TextBoxFromXaml.SetBinding(TextBox.TextProperty, binding); 
    } 
} 
public class MyClass2 
{ 
    public string StringVar { get; set; } 

    public MyClass2() 
    { 
      StringVar = "My String Here"; 
    } 
} 

Et cela va se lier à ma propriété LaChaine exactement ce que je voudrais à. Cependant, ma question vient avec si j'ai la chaîne littérale "MyClass2Object.StringVar" lors de la définition de la source de liaison. Je réalise que je peux utiliser la fonction split pour séparer "MyClass2Object" et "StringVar" de la plus longue chaîne. Je peux alors simplement remplacer la nouvelle ligne PropertyPath par le second résultat de la scission. Cependant, comment remplacer la ligne binding.Source en fonction du premier résultat de la scission. Si cela est possible, je serais en mesure de passer une chaîne comme "MyClass2Object.StringVar" et avoir la propriété Text de la TextBox lier à cette propriété ou si je passe une chaîne comme "AnotherClassObject.StringProperty" et que la propriété TextBox de TextBox se lie au Propriété StringProperty de l'objet instancié dans la variable avec le nom AnotherClassObject. J'espère que j'ai un sens.

+0

Certains code « faux » de ce que vous voulez faire peut-être un peu plus clair que ce que vous décrivez. –

Répondre

12

Il semble que vous vouliez que le PropertyPath soit "Property.Property" qui fonctionnera, mais pour que la liaison fonctionne, il faut un objet source pour la première propriété. Les deux options que je connais sont DataContext ou Source.

Avec votre code exemple l'autre alternative est:

public partial class Window1 : Window 
{ 
    public MyClass2 MyClass2Object { get; set; } 
    public Window1() 
    { 
     // use data context instead of source 
     DataContext = this; 

     InitializeComponent(); 

     MyClass2Object = new MyClass2(); 
     Binding binding = new Binding(); 
     binding.Path = new PropertyPath("MyClass2Object.StringVar"); 
     TextBoxFromXaml.SetBinding(TextBox.TextProperty, binding); 
    } 
} 

public class MyClass2 
{ 
    public string StringVar { get; set; } 
    public MyClass2() 
    { 
     StringVar = "My String Here"; 
    } 
} 
+0

Oh merci, ça a marché. J'aurais pu jurer d'avoir essayé ça. Merci beaucoup. – Nick

Questions connexes