Элементы списка привязки с кодом метки позади - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь связать список структур с метками, которые были созданы динамически.

код структуры:

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

Все работает как шарм!Где моя ошибка? Как динамически связать данные структуры с метками?

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Похоже, для вашего рабочего образца (с PropName) вы определяете имя свойства в пути к свойству, но для принтеров вы определяете значение свойства lst_PrinterToGridBindings[i].extPrinterName.Посмотрите на msdn .Вы также должны указать Source для привязки

0 голосов
/ 27 марта 2019

Чтобы показать список элементов, используйте ItemsControl. Назначьте или свяжите его свойство ItemsSource с коллекцией объектов item. Установите его ItemTemplate в DataTemplate с элементами пользовательского интерфейса, которые привязываются к свойствам класса элемента.

<ItemsControl x:Name="printerList">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding extPrinterName}"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Код:

printerList.ItemsSource = lst_PrinterToGridBindings;

Подробнее см. Обзор шаблонов данных .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...