2008-11-06 4 views
6

Ich bin nicht sicher, ob dies überhaupt möglich ist, aber ich dachte, ich würde fragen. Für meine Zwecke benötige ich zunächst, dass dies im C# -Anteil und nicht im XAML-Teil funktioniert. Das ist, was ich habe und es funktioniert:Bindungsquelle ist Zeichenfolge mit Pfad Eigenschaft

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"; 
    } 
} 

Und das wird an meine StringVar-Eigenschaft genau wie ich es gerne würde binden. Aber meine Frage kommt, was, wenn ich die Zeichenkette „MyClass2Object.StringVar“ haben, wenn die Bindungsquelle einstellen. Ich weiß, ich kann die Split-Funktion verwenden „MyClass2Object“ und „StringVar“ von der längeren Zeichenfolge zu trennen. Ich kann dann einfach die neue PropertyPath-Zeile durch das zweite Ergebnis der Aufteilung ersetzen. Wie würde ich jedoch die binding.Quellzeile nach dem ersten Ergebnis aus der Aufteilung ersetzen. Wenn dies möglich ist, würde ich in der Lage sein, eine Zeichenfolge wie „MyClass2Object.StringVar“ passieren und haben die Eigenschaft Text binden die TextBox auf diese Eigenschaft oder wenn ich eine Zeichenfolge wie „AnotherClassObject.StringProperty“ übergeben und haben die Eigenschaft Text binden die TextBox die StringProperty-Eigenschaft des Objekts, das in der Variablen mit dem Namen AnotherClassObject instanziiert wurde. Ich hoffe ich mache Sinn.

+0

Einige ‚fake‘ Code von dem, was Sie etwas tun möchten vielleicht klarer als das, was Sie beschreiben. –

Antwort

12

Es klingt wie Sie die PropertyPath sein „Property.Property“ wollen, die funktionieren wird, aber für die Bindung es eine Quelle für das erste Property-Objekt arbeiten muss. Die beiden Optionen, die ich bin mir dessen bewusst sind DataContext oder ein Source.

Mit Ihrem Beispielcode die andere Alternative ist:

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 danke, das hat funktioniert. Ich hätte schwören können, dass ich es versucht habe. Vielen Dank. – Nick

Verwandte Themen