Как отобразить в каждом текстовом блоке ListBoxItem с привязкой к файлам разных таблиц - PullRequest
1 голос
/ 29 ноября 2009

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

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

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

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

Ответы [ 2 ]

1 голос
/ 29 ноября 2009

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

0 голосов
/ 29 ноября 2009

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

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

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

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

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

...