Как отобразить в каждом ListBoxItem текстовые блоки с привязкой к файловым полям разных таблиц

StackOverflow https://stackoverflow.com/questions/1816533

  •  08-07-2019
  •  | 
  •  

Вопрос

Приветствую всех и прошу прощения за мой английский!У меня есть поле списка, это ItemsSource = myClientsList.Просмотр по умолчанию.Элементы ListBox имеют шаблон (ControlTemplate), который определен в a в отдельном файле ресурсов.Каждый элемент содержит небольшой текстовый блок, текстовое свойство каждого из которых имеет привязку к полям моего объекта myClientsList.

Мне нужно добавить в шаблон this item больше текстовых блоков, и каждый из них должен иметь привязку к полям другого моего класса myOrdersList.- (Итак, я хочу просмотреть в каждой строке ListBox информацию из разных таблиц моей базы данных - это вопрос).

Проблема в том, что у ItemsSource этого ListBox есть ссылка на объект myClientsList, и я не могу установить myOrderList в ItemSource того же ListBox.Итак, я должен найти способ указать TextBlock.DataContext, который находится внутри ControlTemplate или как можно решить эту проблему другим способом?

p.s.Я новичок в .Net и WPF и, вероятно, в моем объяснении есть ошибки - извините за это.

Это было полезно?

Решение

Похоже, у вас есть тип отображения DataGrid и вы хотите добавить больше столбцов, чтобы отобразить информацию о заказе для данного клиента.Если это так, то вам придется сделать пару вещей.Во-первых, вам нужно будет создать составной объект, который хранит информацию для обеих сущностей в одном объекте (таким образом, каждая строка вашего элемента управления содержит все данные, необходимые для отображения).Во-вторых, я бы рекомендовал использовать фактический элемент управления DataGrid для отображения строк вместо шаблона ListBoxItem .ListView со встроенным в фреймворк GridView не очень хорош, поэтому я бы рекомендовал Сетка данных WPFToolkit для бесплатного варианта.

Другие советы

Здесь есть две проблемы, если я правильно понял вопрос:как создать единую коллекцию, содержащую как Клиентов, так и Заказы, и как отображать Клиентов и Заказы по-разному в одном и том же списке?

Что касается первого, вы можете сделать это с помощью CompositeCollection .

Что касается второго, определите две DataTemplates вместо ControlTemplate .В качестве ключа каждой DataTemplate используйте тип объекта, который он собирается представить, например

<DataTemplate x:Key="{x:Type local:Client}">

В качестве альтернативы используйте ItemsControl.ItemTemplateSelector, чтобы явно указывать на разные DataTemplates в зависимости от типа элемента.Ot если вам действительно нужно использовать ControlTemplates, ознакомьтесь с ItemsControl.ItemContainerStyleSelector .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top