C# 如何在运行时创建的文本框上设置数据绑定?

C# 如何在运行时创建的文本框上设置数据绑定?,c#,wpf,data-binding,C#,Wpf,Data Binding,通常,您会在XAML中设置如下数据绑定: <Textbox Text="{Binding myDataBindingProperty}"/> 在添加文本框时,我希望能够设置数据绑定。然而,我不知道怎么做。我尝试了一些变化,例如: myNewTextbox.SetBinding(myDataBindingProperty); myNewTextbox.Text = "{Binding myDataBindingProperty}"; 还有一些更离奇的猜测,我不会在这里重复!无论如何

通常,您会在XAML中设置如下数据绑定:

<Textbox Text="{Binding myDataBindingProperty}"/>
在添加文本框时,我希望能够设置数据绑定。然而,我不知道怎么做。我尝试了一些变化,例如:

myNewTextbox.SetBinding(myDataBindingProperty);
myNewTextbox.Text = "{Binding myDataBindingProperty}";
还有一些更离奇的猜测,我不会在这里重复!无论如何,在C代码中设置数据绑定的方法是什么

我没有一个合适的绑定源,而且比我想象的更难找到一个。这就是我在这个例子中考虑的事情。如果你能推荐一些有帮助的改进

    public MainWindow()
    {
        DataContext = new ViewModel();
        InitializeComponent();
    }

internal class ViewModel
    {
        public KeyValuePair<string, string> myDataBindingProperty
        {
            set { contentsOfMyNewTextboxes.Add(value.Key, value.Value); }
        }

        //Key = name of TextBox; Value = contents of text box
        private Dictionary<string, string> contentsOfMyNewTextboxes = new Dictionary<string, string>();
    }
public主窗口()
{
DataContext=新的ViewModel();
初始化组件();
}
内部类视图模型
{
公钥值对myDataBindingProperty
{
设置{contentsofmynewtextboxs.Add(value.Key,value.value);}
}
//键=文本框的名称;值=文本框的内容
私有字典内容mynewtextboxs=新字典();
}

使用代码的绑定:

private void AddTextBox(object sender, RoutedEventArgs e)
{
    var myNewTextbox = new TextBox();

    var binding = new Binding
    {
        Path = new PropertyPath("myDataBindingProperty"),
        Mode = BindingMode.TwoWay
    };

    // Bind to the textbox
    myNewTextbox.SetBinding(TextBox.TextProperty, binding);

    grid.Children.Add(myNewTextbox);
}     

请你扩大你的答案好吗?什么去哪里?谢谢看起来var绑定在窗口codebhind构造函数中。BindingOperations行是否在AddTextBox()方法中?MyProp属性是否在视图模型中?我已经有了
DataContext=newviewmodel()。我可以使用相同的数据上下文吗?如果已经设置了相应的DataContext,则不设置绑定的源。编辑了答案。您仍然需要澄清要将文本框绑定到myDataBindingProperty字典的哪个元素。是的,这很棘手。一种方法是为每个新文本框指定一个名称,然后通过数据绑定将名称和文本内容传递给myDataBindingProperty。有办法吗?还有别的办法吗?谢谢有很多方法。然而,现在还不清楚你到底在期待什么。希望编辑文本框不会神奇地替换字典中的条目。那不行。恐怕那正是我的想法。那时,词典的想法可能不是最好的方法。是否有另一种方法可以将新文本框的值存储在一个数据结构中,该数据结构可以随着文本框中的值的更改而更新?当然,这是具有字符串属性的包装器对象的常规集合。与在代码隐藏中创建文本框不同,您还可以使用ItemsControl,该控件在其ItemTemplate中声明文本框,并将其ItemsSource属性绑定到您的集合。看一看。
private void AddTextBox(object sender, RoutedEventArgs e)
{
    var myNewTextbox = new TextBox();

    var binding = new Binding
    {
        Path = new PropertyPath("myDataBindingProperty"),
        Mode = BindingMode.TwoWay
    };

    // Bind to the textbox
    myNewTextbox.SetBinding(TextBox.TextProperty, binding);

    grid.Children.Add(myNewTextbox);
}