Cómo mostrar en cada bloque de texto del elemento ListBox con enlace a campos de tablas diferentes

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

  •  08-07-2019
  •  | 
  •  

Pregunta

¡Saludos a todos y perdón por mi inglés! Tengo un ListBox, es ItemsSource = myClientsList.DefaultView. Los elementos de ListBox tienen una plantilla (ControlTemplate), que se define en un archivo de recursos separado. Cada elemento contiene un poco de TextBlock, la propiedad de texto de cada uno tiene un enlace a los campos de mi Object myClientsList.

Necesito agregar en una plantilla de este elemento más TexBlock's y cada uno de ellos debe tener un enlace a campos de otro my class myOrdersList. - (Por lo tanto, deseo ver en cada línea de información ListBox de diferentes tablas de mi base de datos, esta es una pregunta).

Problema en el sentido de que ItemsSource de ListBox tiene un enlace para objetar myClientsList y no puedo establecer myOrderList en ItemSource del mismo ListBox. Entonces, ¿debo encontrar una manera de especificar TextBlock.DataContext dentro de ControlTemplate o cómo es posible resolver este problema de otra manera?

p.s. Soy nuevo en .Net y WPF y probablemente tenga errores en mi explicación, lo siento.

¿Fue útil?

Solución

Parece que tiene un tipo de visualización DataGrid y desea agregar más columnas para mostrar la información del pedido de un cliente determinado. Si este es el caso, tendrá que hacer un par de cosas. Primero, necesitará crear un objeto compuesto que almacene información para ambas entidades en un solo objeto (para que cada fila de su control tenga todos los datos que necesita mostrar). En segundo lugar, recomendaría usar un control DataGrid real para mostrar filas en lugar de crear un ListBoxItem. ListView con un GridView integrado en el marco no es excelente, por lo que recomendaría el DataGrid de WPFToolkit para una opción gratis.

Otros consejos

Hay dos problemas aquí, si he entendido la pregunta: ¿cómo se crea una colección única que contiene Clientes y Pedidos, y cómo se muestran Clientes y Pedidos de diferentes maneras dentro del mismo ListBox?

Con respecto al primero, puede hacer esto usando una colección compuesta.

Con respecto al segundo, defina dos DataTemplates en lugar de una ControlTemplate. Como clave de cada DataTemplate, use el tipo de objeto que va a presentar, por ejemplo,

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

Alternativamente, use ItemsControl.ItemTemplateSelector para apuntar explícitamente a diferentes DataTemplates dependiendo del tipo de elemento. Ot, si realmente tiene que usar ControlTemplates, consulte ItemsControl.ItemContainerStyleSelector.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top