如何在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

如何在WPF中动态创建和绑定元素

不应该指定ElementName,而应该直接指定绑定的Source:

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

关于ElementName:我看不出这两个ui元素最终会出现在一些共同的视觉树中——你不能指望这能在两个不同的对象上工作。

作为一个建议,几乎总是没有必要"动态"生成ui元素。通常你想要做的事情是更容易实现的ItemsControl和DataTemplate的项目和绑定ItemsSource到一些对象。

如果你真的想要像做Windows窗体那样做WPF,那么你应该听从Jon的建议。