如何动态创建元素并在WPF中绑定它?

时间:2013-04-25 19:33:43

标签: c# wpf binding

我想动态创建元素,所以我使用C#代码behide来创建一个控件。

单选按钮已创建,我想用它绑定一些元素(在这种情况下,我使用按钮)。

这是我的源代码

/ *创建单选按钮* /

RadioButton secondaryRadio = new RadioButton()
    { 
        Name = "secondaryRadio_" + orderOfTransport + "_" + orderOfSubTransport,
        GroupName = "Transport_" + orderOfTransport + "_" + orderOfSubTransport,
        IsChecked = false,
     };

/ *创建绑定对象* /

        Binding userChoice2 = new Binding("IsChecked")
        {
            ElementName = "secondaryRadio_" + orderOfTransport + "_" + orderOfSubTransport,
        };

/ *创建按钮并绑定* /

       Button outBoundButton = new Button()
        {

            Content = "Select",
            Name = "inb_button_" + orderOfTransport + "_" + orderOfSubTransport,
        };

        outBoundButton.SetBinding(Button.IsEnabledProperty, userChoice2);

这是从输出窗口

获得的
  

找不到带参考的绑定源   '的ElementName = secondaryRadio_1_0'。 BindingExpression:路径=器isChecked;   的DataItem = NULL; target元素是'Button'(Name ='inb_button_1_0');   target属性为'IsEnabled'(类型'Boolean')

我对这个绑定做错了什么?我可以使用绑定对象超过1次吗?

非常感谢你的帮助:D

2 个答案:

答案 0 :(得分:3)

您应该直接指定绑定ElementName,而不是指定Source

Binding userChoice2 = new Binding("IsChecked")
{
    Source = secondaryRadio
};

答案 1 :(得分:0)

关于 ElementName :我看不出两个UIElements最终出现在一些常见的Visual Tree中 - 你不能指望它可以用于两个不同的对象。

作为建议,几乎总是不必“动态”生成UIElements。通常,使用项目的ItemsControl和DataTemplate以及将ItemsSource绑定到某些对象,可以更轻松地实现您想要做的事情。

如果确实想要像Windows窗体那样做WPF,那么你应该遵循Jon的建议。