首页 > 解决方案 > 绑定带有标签代码的列表元素

问题描述

我正在尝试将结构列表与动态创建的标签绑定。

结构代码:

public struct PrinterToGridBinds
        {
            public string extPrinterName { get; set; }
            public string extIcecreamType { get; set; }
            public string extBatchNumber { get; set; }
            public string extBeginingDate { get; set; }
            public string extPrinterState { get; set; }
            public string extBatchCounter { get; set; }
            public string extDIOCounter { get; set; }

            public PrinterToGridBinds(string extPrinterName, string extIcecreamType, string extBatchNumber, string extBeginingDate,
                string extPrinterState, string extBatchCounter, string extDIOCounter)
            {
                this.extPrinterName =  extPrinterName;
                this.extIcecreamType = extIcecreamType;
                this.extBatchNumber = extBatchNumber;
                this.extBeginingDate = extBeginingDate;
                this.extPrinterState = extPrinterState;
                this.extBatchCounter = extBatchCounter;
                this.extDIOCounter = extDIOCounter;
            }
        }

        public List<PrinterToGridBinds> lst_PrinterToGridBindings = new List<PrinterToGridBinds>();

初始化结构列表

private void PrinterToGridBindingInit()
        {
            for (int i = 0; i < PrinterNumber; i++)
            {
                lst_PrinterToGridBindings.Add(new PrinterToGridBinds("Num " + (i + 1).ToString(), "-", "-", "-", "-", "-", "-"));
            }
        }

并尝试将其与动态创建的标签绑定。下面的代码:

for (int i = 0; i < 8; i++)
            {
                Label lbl_PrinterName = new Label();
                lbl_PrinterName.Name = "Name_" + i.ToString();
                Binding lbl_Binding = new Binding {Path = new PropertyPath(lst_PrinterToGridBindings[i].extPrinterName), Mode = BindingMode.OneWay };               
                lbl_PrinterName.SetBinding(Label.ContentProperty, lbl_Binding);

                Grid.SetRow(lbl_PrinterName, i + 2);
                Grid.SetColumn(lbl_PrinterName, 3);
                grd_WorkArea.Children.Add(lbl_PrinterName);
            }

程序运行后我看不到任何结果。从另一边,如果我定义财产

public string PropName1 { get; set; } = "PropTest";

并将此属性添加到绑定中,如下所示:

Binding lbl_Binding = new Binding {Path = new PropertyPath("PropName1"), Mode = BindingMode.OneWay };

一切都像魅力一样!我的错误在哪里?如何动态绑定结构数据和标签?

标签: c#wpfdata-binding

解决方案


似乎,对于您的工作示例(使用PropName),您在属性路径中定义了属性名称,但对于打印机,您定义了一个属性值lst_PrinterToGridBindings[i].extPrinterName。看看Binding.Path属性。您还应该指定Sourcefor 绑定


推荐阅读