我不确定这是否可能,但我想我会问.首先,为了我的目的,我要求它在C#部分而不是XAML部分工作.这是我拥有的,它的工作原理:
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";
}
}
Run Code Online (Sandbox Code Playgroud)
这将完全按照我的意愿绑定到我的StringVar属性.但是,我的问题是如果在设置绑定源时我有文字字符串"MyClass2Object.StringVar".我意识到我可以使用split函数将"MyClass2Object"和"StringVar"从较长的字符串中分离出来.然后我可以用拆分中的第二个结果替换新的PropertyPath行.但是,如何根据拆分的第一个结果替换binding.Source行.如果这是可能的,我将能够传递像"MyClass2Object.StringVar"这样的字符串并让TextBox的Text属性绑定到该属性,或者如果我传递像"AnotherClassObject.StringProperty"这样的字符串并且具有TextBox' ■Text属性绑定到名为AnotherClassObject的变量中实例化的对象的StringProperty属性.我希望我有意义.
Tod*_*ite 13
听起来你希望PropertyPath是"Property.Property",它可以工作,但是为了使绑定工作,它需要第一个Property的源对象.我所知道的两个选项是DataContext或Source.
使用示例代码,另一种选择是:
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";
}
}
Run Code Online (Sandbox Code Playgroud)