【问题标题】:How to create element dynamically and bind it in WPF?如何动态创建元素并在 WPF 中绑定它?
【发布时间】:2013-04-19 20:23:49
【问题描述】:

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

单选按钮已创建,我想用它绑定一些元素(在本例中,我使用按钮)。

这是我的源代码

/*创建单选按钮*/

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

这是从输出窗口得到的

找不到与参考绑定的源 '元素名称=secondaryRadio_1_0'。绑定表达式:路径=IsChecked; 数据项=空;目标元素是“按钮”(名称=“inb_button_1_0”); 目标属性是“IsEnabled”(类型“布尔”)

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

非常感谢您的帮助:D

【问题讨论】:

  • 您的绑定错误告诉您绑定在 UI 中的任何位置都找不到名为 "secondaryRadio_1_0" 的元素。该单选按钮是否在创建后添加到 UI 中?其他需要检查的是单选按钮是否存在于 Button 可以访问的 VisualTree 中的某个位置,您可能需要确保在评估绑定之前呈现单选按钮。
  • What I did wrong for this binding? - 一切。不要在代码中创建或操作 UI 元素。 WPF不是winforms。学习 MVVM。 - 免责声明:抱歉粗鲁和如此直截了当,我只是在听 Pantera。
  • 为 Pantera 加 1,不是因为粗鲁!
  • @Rachel 问题已经解决了。将元素名称更改为源。感谢您的帮助
  • @HighCore 感谢您的建议。我是 WPF 的新手。我有一个问题,如何使用 xaml 在运行时创建 UI 元素?

标签: c# wpf binding


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    关于 ElementName:我看不到这两个 UIElement 最终会出现在一些常见的 Visual Tree 中 - 你不能指望这可以与两个不同的对象一起使用。

    作为忠告,几乎总是没有必要“动态”生成 UIElement。通常,使用 ItemsControl 和 Items 的 DataTemplate 并将 ItemsSource 绑定到某些对象更容易实现您想要做的事情。

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

    【讨论】:

    • 这次我按照 Jon 的建议解决了问题,下次我将使用 ItemsControl 作为您的建议。感谢您的帮助:D
    猜你喜欢
    • 2013-08-18
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    相关资源
    最近更新 更多