如何在WPF中动态创建和绑定元素
本文关键字:创建 绑定 元素 动态 WPF | 更新日期: 2023-09-27 18:11:00
我想动态创建一个元素,所以我使用c#代码来创建一个控件。
单选按钮已经创建,我想要绑定一些元素与它(在本例中,我使用button)。
这是我的源代码
/*create button */
RadioButton secondaryRadio = new RadioButton()
{
Name = "secondaryRadio_" + orderOfTransport + "_" + orderOfSubTransport,
GroupName = "Transport_" + orderOfTransport + "_" + orderOfSubTransport,
IsChecked = false,
};
//
Binding userChoice2 = new Binding("IsChecked")
{
ElementName = "secondaryRadio_" + orderOfTransport + "_" + orderOfSubTransport,
};
/*create button and bind */
Button outBoundButton = new Button()
{
Content = "Select",
Name = "inb_button_" + orderOfTransport + "_" + orderOfSubTransport,
};
outBoundButton.SetBinding(Button.IsEnabledProperty, userChoice2);
这是输出窗口
得到的结果无法找到与引用绑定的源文件"ElementName = secondaryRadio_1_0"。BindingExpression:路径=完成;DataItem =零;目标元素是'Button' (Name='inb_button_1_0');目标属性为"IsEnabled"(类型为"Boolean")
我对这个绑定做错了什么?我可以多次使用绑定对象吗?
D不应该指定ElementName
,而应该直接指定绑定的Source
:
Binding userChoice2 = new Binding("IsChecked")
{
Source = secondaryRadio
};
关于ElementName:我看不出这两个ui元素最终会出现在一些共同的视觉树中——你不能指望这能在两个不同的对象上工作。
作为一个建议,几乎总是没有必要"动态"生成ui元素。通常你想要做的事情是更容易实现的ItemsControl和DataTemplate的项目和绑定ItemsSource到一些对象。
如果你真的想要像做Windows窗体那样做WPF,那么你应该听从Jon的建议。