2009-11-29 4 views
1

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), qui est défini dans un dans un fichier de ressources distinct. Chaque élément contient un peu de TextBlock, Text -property de chacun a une liaison aux champs de mon Object myClientsList.Comment afficher dans chaque bloc de texte ListBoxItem avec liaison à un filelds d'une tables différentes

J'ai besoin d'ajouter dans un modèle de cet élément plus de TexBlock et chacun d'eux doit avoir des liens avec les champs d'un autre myOrdersList de ma classe. - (Donc, je souhaite voir sur chaque ligne d'informations ListBox à partir de différentes tables de ma base de données - c'est une question).

Problème en ce que ItemsSource de ListBox a un lien pour objecter myClientsList et je ne peux pas définir myOrderList à ItemSource de même ListBox. Donc je dois 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 un nouveau dans .Net et WPF et probablement avoir une erreur dans mon explication - désolé pour cela.

Répondre

1

Il semble que vous ayez un type d'affichage DataGrid et que vous souhaitiez ajouter plus de colonnes afin d'afficher les informations de commande pour un client donné. Si c'est le cas, vous devrez faire quelques choses. Tout d'abord, vous devez créer un objet composite qui stocke les informations pour les deux entités dans un seul objet (de sorte que chaque ligne de votre contrôle possède toutes les données à afficher). Deuxièmement, je recommanderais d'utiliser un contrôle DataGrid réel pour afficher les lignes au lieu de modéliser un ListBoxItem. Le ListView avec un GridView construit dans le cadre n'est pas génial, donc je recommanderais le WPFToolkit's DataGrid pour une option gratuite.

+0

Merci, Abe. Je vais essayer d'utiliser DataGrid de WPFToolkit comme une variante – Victor

0

Si vous avez compris la question suivante: 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 la même liste de contrôle? En ce qui concerne la première, vous pouvez le faire en utilisant un CompositeCollection. En ce qui concerne la seconde, 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 ex.

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

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

+0

J'ai deux objets ObservableCollection - myClientsList et myOrdersList. Le ListBox fonctionne avec le premier amende, mais j'ai besoin d'ajouter à chaque ListBoxItem des champs de données de la deuxième collection. Comme je l'ai compris, je ne peux pas utiliser ItemTemplateSelector - parce que c'est un 'sélecteur' et de cette façon ne me donnera pas le résultat souhaité. Je vais essayer d'utiliser un CompositeCollection (je ne connaissais pas la présence de cet objet). Merci à vous pour votre commentaire. – Victor

Questions connexes