我想动态创建元素,所以我使用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
答案 0 :(得分:3)
您应该直接指定绑定ElementName
,而不是指定Source
:
Binding userChoice2 = new Binding("IsChecked")
{
Source = secondaryRadio
};
答案 1 :(得分:0)
关于 ElementName :我看不出两个UIElements最终出现在一些常见的Visual Tree中 - 你不能指望它可以用于两个不同的对象。
作为建议,几乎总是不必“动态”生成UIElements。通常,使用项目的ItemsControl和DataTemplate以及将ItemsSource绑定到某些对象,可以更轻松地实现您想要做的事情。
如果确实想要像Windows窗体那样做WPF,那么你应该遵循Jon的建议。