2008-12-11 5 views
1

J'essaie de créer une vue de détail principale d'une relation linq à sql dans wpf. La vue aura deux comboboxes. Un pour sélectionner l'élément principal et un autre pour sélectionner l'élément de détail.Liaison principale de détail à l'aide de wpf/linq à sql

Je l'ai fait en utilisant un ensemble de données ADO.Net contenant deux tables et une relation entre les tables. où la première zone de liste déroulante se lie au champ maître et la seconde zone de liste déroulante se lie à la relation.

DataContext="{Binding Source={StaticResource ContactDataSet}, Path=Company}" 

Maître

<ComboBox Name="comboBox_CompanyName" 
      ItemsSource="{Binding}" 
      DisplayMemberPath="Company" 
      IsSynchronizedWithCurrentItem="True" 
      /> 

Détail, Company2Contact est le relationsip

<ComboBox Name="comboBox_ContactName" 
      ItemsSource="{Binding Path=Company2Contact}" 
      DisplayMemberPath="Contact"         
      IsSynchronizedWithCurrentItem="True"         
      /> 

Je cherche à obtenir des résultats similaires en utilisant LINQ to SQL. Si le paramètre wpf datacontext est défini sur linqDataContext, je peux me lier aux données de base, mais je ne peux pas me lier à la relation.

J'ai regardé l'objet datacontext et il semble avoir été configuré correctement. Chaque objet de la société est présent et contient une collection d'objets Contact.

Est-ce que quelqu'un sait comment lier à la collection d'objets de contact stockés dans l'objet de société sélectionné?

Merci

Répondre

2

Si le chargement defered est activé (par défaut), puis vos objets enfants sont récupérés seulement quand ils sont nécessaires (ce qui serait quand le second les accès de liaison de données). Cependant, pour que le chargement différé fonctionne, le datacontext doit rester actif. Si vous chargez vos objets maître/détail, mais que vous interrogez uniquement le datacontext de l'objet maître, les détails ne sont pas récupérés à ce stade.

L'autre option consiste à utiliser l'option LoadWith du contexte de données. Vous devez spécifier que lorsque vous chargez vos objets maîtres, vous avez également besoin des objets de détail.

Personnellement ce que je fais (et c'est probablement très controversé), mais j'ai tendance à garder le DataContext en vie pour la vie de mon écran. Cela rend les choses tellement plus faciles et il n'y a vraiment aucun coup de performance du tout. Je fais cela dans mon ViewModel. Je garde une référence au DataContext là-dedans.

+0

D'accord, laissez le contexte ouvert ou utilisez les options LoadWith pour récupérer les données dans la liaison initiale. – Jab

+0

Merci pour la réponse. Quelle option recommanderiez-vous? –

+0

Voir ma note supplémentaire dans la réponse – Micah

Questions connexes