Come visualizzare in ogni blocco di testo Item ListBox con associazione a campi di tabelle diverse

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

  •  08-07-2019
  •  | 
  •  

Domanda

Un saluto a tutti e scusate il mio inglese! Ho un ListBox, è ItemsSource = myClientsList.DefaultView. Gli elementi di ListBox hanno un modello (ControlTemplate), definito in un file di risorse separato. Ogni articolo contiene un po 'di TextBlock, ciascuno dei quali ha un'associazione con i campi del mio oggetto myClientsList.

Devo aggiungere in un modello di questo elemento più TexBlock e ognuno di essi deve avere un legame con i campi di un'altra mia classe myOrdersList. - (Quindi desidero visualizzare su ogni riga di informazioni ListBox da diverse tabelle del mio database - questa è una domanda).

Problema in quanto la ItemsSource di ListBox ha un collegamento all'oggetto myClientsList e non riesco a impostare myOrderList su ItemSource della stessa ListBox. Quindi devo trovare un modo per specificare TextBlock.DataContext all'interno di ControlTemplate o come è possibile risolvere questo problema in un altro modo?

P.S. Sono un nuovo in .Net e WPF e probabilmente ho un errore nella mia spiegazione - scusatemi.

È stato utile?

Soluzione

Sembra che tu abbia un tipo di display DataGrid e desideri aggiungere più colonne per visualizzare le informazioni sull'ordine per un determinato cliente. In questo caso, dovrai fare un paio di cose. Innanzitutto, dovrai creare un oggetto composito che memorizza le informazioni per entrambe le entità in un singolo oggetto (quindi ogni riga del tuo controllo ha tutti i dati necessari per visualizzare). In secondo luogo, consiglierei di utilizzare un controllo DataGrid effettivo per visualizzare le righe invece di creare un modello ListBoxItem. ListView con GridView integrato nel framework non è eccezionale, quindi consiglierei il DataGrid di WPFToolkit per un'opzione gratuita.

Altri suggerimenti

Ci sono due problemi qui, se ho capito la domanda: come si crea una singola raccolta contenente sia i clienti che gli ordini e come si visualizzano i clienti e gli ordini in modi diversi all'interno dello stesso ListBox?

Per quanto riguarda il primo, puoi farlo usando un CompositeCollection.

Per quanto riguarda il secondo, definire due DataTemplate invece di ControlTemplate. Come chiave di ciascun DataTemplate, usa il tipo di oggetto che presenterà, ad esempio

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

In alternativa, utilizzare ItemsControl.ItemTemplateSelector per puntare esplicitamente a diversi DataTemplates a seconda del tipo di elemento. Se devi davvero usare ControlTemplates, controlla ItemsControl.ItemContainerStyleSelector.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top