绑定源是一个字符串,其中包含属性路径。

7

我不确定这是否可行,但我想问一下。首先,为了我的目的,我需要它在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";
     }
}

我希望这个能够精准地绑定到我的StringVar属性。但是,如果我在设置绑定源时有一个字面字符串"MyClass2Object.StringVar",我该怎么办呢?我意识到可以使用split函数从较长的字符串中分离出"MyClass2Object"和"StringVar"。然后,我只需要用split的第二个结果替换新的PropertyPath行。但是,如何根据split的第一个结果替换binding.Source行呢?如果这是可能的,我就可以传递一个类似"MyClass2Object.StringVar"的字符串,并使TextBox的Text属性绑定到该属性;或者如果我传递一个类似"AnotherClassObject.StringProperty"的字符串,就可以使TextBox的Text属性绑定到实例化变量名为AnotherClassObject的对象的StringProperty属性。我希望我表达清楚了。


你想要做什么的一些“伪代码”可能比你描述的更清晰。 - Todd White
1个回答

13

听起来您希望 PropertyPath 为 "Property.Property" ,这是可行的,但为了使绑定工作,需要一个源对象作为第一个 Property。我知道的两个选项是 DataContextSource

根据您的示例代码,另一种选择是:

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

哦,谢谢,那个可行。我本来以为我试过了。非常感谢。 - Nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接