tags:

views:

8260

answers:

1

I am unsure if this is even possible, but I thought I would ask. First off, for my purposes, I require this to work in the C# portion and not the XAML part. This is what I have and it works:

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

And this will bind to my StringVar property exactly how I would like it to. However, my question comes with what if I have the literal string "MyClass2Object.StringVar" when setting the binding source. I realize I can use the split function to separate "MyClass2Object" and "StringVar" from the longer string. I can then just replace the new PropertyPath line with the the second result from the split. However, how would I replace the binding.Source line according to the first result from the split. If this is possible, I would be able to pass a string like "MyClass2Object.StringVar" and have the TextBox's Text property bind to that property or if I pass a string like "AnotherClassObject.StringProperty" and have the TextBox's Text property bind to the StringProperty property of the object instantiated in the variable with name AnotherClassObject. I hope I am making sense.

+7  A: 

It sounds like you want the PropertyPath to be "Property.Property" which will work, but for the binding to work it needs a source object for the first Property. The two options that I'm aware of are DataContext or a Source.

With your sample code the other alternative is:

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";
 }
}
Todd White
Oh thank you, that worked. I could've sworn I tried that. Thanks so much.
Nick