2010-10-21 2 views
0

J'ai un ListBox que j'utilise pour afficher les résultats de diverses recherches. Ces recherches peuvent se produire sur de nombreux types d'objets différents et j'ai un peu de mal à le faire fonctionner dans toutes les circonstances.WPF - Comment réutiliser la liste pour l'affichage de différentes listes d'objets?

La plupart du temps, je peux simplement définir ListBox.ItemSource = List et cela fonctionne très bien si je définis aussi DisplayMemberPath et SelectedValuePath. Je rencontre des problèmes lorsque la chaîne que je souhaite afficher pour un objet donné est en fait une méthode ou une combinaison de propriétés.

Est-ce que quelqu'un peut me diriger dans la bonne direction pour résoudre ce problème?

Merci,
Sonny

Répondre

1

Voici quelques options auxquelles je peux penser.

  1. Créer un DataTemplate pour chaque objet dans la liste
  2. Créer une classe wrapper et lier votre zone de liste à une liste de ces classes d'emballage. Il faudrait un peu de travail pour créer un constructeur (ou une autre méthode) pour chaque classe de résultat de recherche possible.
+0

# 1 a fait l'affaire. J'ai mis les différents modèles dans le code avec quelque chose comme ceci: 'this.lstSearchResults.ItemTemplate = (DataTemplate) this.FindResource (" clientListing ");' où "clientListing" est le nom du modèle que je voulais utiliser. :) –

+0

Si vous définissez le TargetType dans votre datatemplate et que vous vous débarrassez de la clé, je ne pense pas que vous ayez à définir le modèle d'élément. Il le trouvera automatiquement. – mdm20

+0

Plutôt que de définir le modèle dans le code-behind, pourquoi ne pas créer un DataTemplateSelector? – grimstoner

0

drôle, je viens de poser une très similaire question sur le DataGrid.

Ce que vous pouvez faire est de créer une collection personnalisée d'objets ListBoxItem pour chaque type d'objet de recherche et d'ajouter ces éléments au ListBox lors de l'exécution.

List<ListBoxItem> lbiTest = GetListBoxItems(); 
foreach (ListBoxItem lbi in lbiTest) 
{ 
    lbMyListBox.Items.Add(lbi); 
} 
+0

Est-ce que l'ajout des éléments dans ma ListBox ne va pas à l'encontre du but de DataBinding? –

+0

C'était exactement ma question ... cela va aussi à l'encontre des directives du MVVM en rendant votre ViewModel conscient des contrôles spécifiques de l'interface utilisateur ... j'espère que quelqu'un pourrait partager un bon aperçu ... –

Questions connexes