c# - two - La fuente de enlace es una cadena con ruta a la propiedad
wpf set binding (1)
Parece que desea que PropertyPath sea "Property.Property", que funcionará, pero para que el enlace funcione, necesita un objeto de origen para la primera Propiedad. Las dos opciones que conozco son DataContext o Source .
Con su código de muestra, la otra alternativa es:
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";
}
}
No estoy seguro si esto es posible, pero pensé que podría preguntar. En primer lugar, para mis propósitos, requiero que esto funcione en la parte C # y no en la parte XAML. Esto es lo que tengo y funciona:
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";
}
}
Y esto se unirá a mi propiedad de StringVar exactamente como me gustaría. Sin embargo, mi pregunta viene con qué si tengo la cadena literal "MyClass2Object.StringVar" cuando establezco el origen de enlace. Me doy cuenta de que puedo usar la función de división para separar "MyClass2Object" y "StringVar" de la cadena más larga. Entonces puedo simplemente reemplazar la nueva línea PropertyPath con el segundo resultado de la división. Sin embargo, ¿cómo reemplazaría el enlace? Línea de fuente de acuerdo con el primer resultado de la división. Si esto es posible, podría pasar una cadena como "MyClass2Object.StringVar" y hacer que la propiedad TextBox''s Text se vincule a esa propiedad o si paso una cadena como "AnotherClassObject.StringProperty" y hacer que la propiedad TextBox''s Text se vincule al Propiedad StringProperty del objeto instanciado en la variable con el nombre AnotherClassObject. Espero que tenga sentido.