2013-04-25 119 views
0

我想动态地创建元素,所以我使用C#代码behide来创建控件。如何动态创建元素并将其绑定到WPF中?

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

这是我的源代码

/*创建单选按钮*/

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); 

and this i s从输出窗口获得

找不到与参考文献绑定的来源 'ElementName = secondaryRadio_1_0'。 BindingExpression:路径=器isChecked; DataItem = null;目标元素是'Button'(Name ='inb_button_1_0'); 目标属性是“的IsEnabled”(类型“布尔”)

我没有什么错此绑定?我可以使用超过1次的绑定对象吗?

您的帮助非常感谢:d

+1

您的绑定错误告诉您绑定无法在UI中的任何位置找到名为'“secondaryRadio_1_0”'的元素。该单选按钮是在创建后添加到用户界面的吗?其他要检查的事情是单选按钮存在于Button可以访问的VisualTree中的某处,并且您可能需要确保单选按钮在绑定被评估之前被呈现。 – Rachel 2013-04-25 19:59:51

+1

'我为这个绑定做错了什么?' - 一切。不要在代码中创建或操作UI元素。 WPF不是winforms。学习MVVM。 - 免责声明:对于粗鲁无礼和为人坦率,我只是在听Pantera。 – 2013-04-25 19:59:58

+0

为Pantera +1,而不是无礼! – flq 2013-04-25 20:04:03

回答

3

除了指定的ElementName,你应该直接指定绑定的Source

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

非常感谢,这是工作! – neenutna 2013-04-25 20:14:58

0

关于的ElementName:我看不出这两个UI元素结束在一些常见的可视化树中 - 你不能指望这与两个不同的对象一起工作。

作为忠告的话,几乎总是不需要“动态”生成UIElements。通常,使用ItemControl的ItemsControl和DataTemplate以及将ItemsSource绑定到某些对象,可以更轻松地实现您想要执行的操作。

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

+0

这次我通过Jon的建议解决了问题,下次我将使用ItemsControl作为您的建议。感谢您的帮助:D – neenutna 2013-04-26 08:00:49

相关问题