Comment afficher dans chaque bloc de texte ListBox Item avec une liaison à des champs d'une table différente

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

  •  08-07-2019
  •  | 
  •  

Question

Salutations à tous et désolé pour mon anglais! J'ai un ListBox, c'est ItemsSource = myClientsList.DefaultView. Les éléments de ListBox ont un modèle (ControlTemplate), défini dans un fichier de ressources séparé. Chaque élément contient un peu de texte TextBlock, la propriété Texte de chacun d'entre eux est liée aux champs de ma liste d'objet myClientsList.

Je dois ajouter dans un modèle d'élément cet article plus de TexBlock et chacun d'entre eux doit avoir une liaison avec les champs d'une autre classe ma classe myOrdersList. - (Je souhaite donc afficher sur chaque ligne de ListBox des informations provenant de différentes tables de ma base de données - ceci est une question).

Le problème est que ItemsSource de ListBox ont un lien vers l'objet myClientsList et que je ne peux pas définir myOrderList sur ItemSource du même ListBox. Je dois donc trouver un moyen de spécifier TextBlock.DataContext dans ControlTemplate ou comment il est possible de résoudre ce problème d’une autre manière?

p.s. Je suis nouveau dans .Net et WPF et j’ai probablement une erreur dans mon explication - désolé pour cela.

Était-ce utile?

La solution

On dirait que vous avez un type d’affichage DataGrid et que vous souhaitez ajouter plus de colonnes afin d’afficher les informations de commande pour un client donné. Si tel est le cas, vous devrez faire plusieurs choses. Tout d'abord, vous devez créer un objet composite qui stocke les informations des deux entités dans un seul objet (chaque ligne de votre contrôle contient donc toutes les données à afficher). Deuxièmement, je vous recommanderais d'utiliser un contrôle DataGrid réel pour afficher des lignes plutôt que de créer un modèle ListBoxItem. Le ListView avec un GridView intégré au framework n’est pas génial, je vous recommande donc le le DataGrid de WPFToolkit pour une option gratuite.

Autres conseils

Si j'ai bien compris la question, il y a deux problèmes ici: comment créer une seule collection contenant à la fois des clients et des commandes et comment afficher les clients et les commandes de différentes manières dans le même ListBox?

En ce qui concerne le premier, vous pouvez le faire en utilisant une CompositeCollection.

Concernant le second, définissez deux DataTemplates au lieu d’un ControlTemplate. En tant que clé de chaque DataTemplate, utilisez le type de l’objet qu’il va présenter, par exemple.

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

Vous pouvez également utiliser ItemsControl.ItemTemplateSelector pour désigner explicitement différents DataTemplates en fonction du type d'élément. Si vous devez vraiment utiliser ControlTemplates, consultez ItemsControl.ItemContainerStyleSelector.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top