我尝试将结构列表与动态创建的标签绑定。
结构代码:
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 };
所有作品都像魅力!我的错误在哪里?如何动态地将结构数据与标签绑定?
答案 0 :(得分:1)
好像,对于您的工作样本(使用PropName
),您可以在属性路径中定义属性名称,但是对于打印机,您可以定义属性值lst_PrinterToGridBindings[i].extPrinterName
。看看msdn。您还应该指定Source
进行绑定
答案 1 :(得分:0)
为了显示元素列表,请使用ItemsControl。将其ItemsSource属性分配或绑定到项目对象的集合。将其ItemTemplate设置为具有绑定到item类属性的UI元素的DataTemplate。
<ItemsControl x:Name="printerList">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding extPrinterName}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
后面的代码:
printerList.ItemsSource = lst_PrinterToGridBindings;
有关详细信息,请参见Data Templating Overview。