2010-11-19 16 views
0

J'ai un problème avec la façon dont je devrais lier mon DataGrid de la meilleure façon.Liaison d'une grille avec deux sources de données dans Silverlight

Le problème est que je voudrais utiliser deux itemSources. J'ai une liste avec beaucoup d'incidents, chaque incident contient une liste de buggs. Ce que je voudrais faire est de lier la moitié d'une ligne gridview avec certains des champs de l'incident, et la moitié de la grille avec les bogues correspondants que l'incident contient.

Comment est-ce que je serais capable de faire ceci de la meilleure manière?

J'ai accès à la grille de données componentOne, mais si la grille normale fonctionne, tout est bon.

Mais je voudrais avoir une capacité de tri.

Merci

Répondre

0

On dirait que vous voulez juste vous assurer que vous n'avez pas AutoGenerateColumns="True".

<sdk:DataGrid AutoGenerateColumns="False">  
     <sdk:DataGrid.Columns> 
      <sdk:DataGridTextColumn 
       Header="ItemSource1Property1Name" 
       Width="SizeToHeader" 
       Binding="{Binding ItemSource1.Property1}" 
       FontSize="20" /> 
      <sdk:DataGridTextColumn 
       Header="ItemSource1Property2Name" 
       Width="SizeToHeader" 
       Binding="{Binding ItemSource1.Property2}" 
       FontSize="20" /> 
      <sdk:DataGridTextColumn 
       Header="ItemSource2Property1Name" 
       Width="SizeToCells" 
       Binding="{Binding ItemSource2.Property1}" 
       FontSize="20" /> 
     </sdk:DataGrid.Columns> 
     . 
     . 
     . 
     Rest of Code 
     . 
     . 
     . 
</sdk:DataGrid> 

EDIT

Si vous choisissez d'utiliser une enveloppe pour votre source d'élément alors vous aurez quelque chose comme ceci dans votre code:

public class ItemWrapper 
{ 
    ObservableCollection<ItemSource1Type> ItemSource1 {get;set;} 
    ObservableCollection<ItemSource2Type> ItemSource2 {get;set;} 
} 

Et puis dans votre modèle de vue ou code derrière (où vous voulez définir les propriétés auxquelles vous voulez vous lier):

public class ViewModel //This may just end up being your code behind depending on how you have your entire SL project set up. 
{ 
    ItemWrapper ItemWrapper { get; set; } //set the two properties either in the constructor or in whatever code initializes ViewModel. 
} 

Dans votre XAML:

<sdk:DataGrid AutoGenerateColumns="False" 
       ItemSource="{Binding ItemWrapper}" 
       DataContext="{Binding}">  
     <sdk:DataGrid.Columns> 
      <sdk:DataGridTextColumn 
       Header="ItemSource1Property1Name" 
       Width="SizeToHeader" 
       Binding="{Binding ItemSource1.Property1}" 
       FontSize="20" /> 
+0

Hey, merci pour l'entrée, mais comment cette ItemSourceWrapper ressembler, s'il vous plaît un code derrière donc je peux voir comment je devrais ajouter mes deux sources dans l'emballage .. Merci – Fore

+0

Oh désolé, je voulais dire avais à prendre ce en dehors. Je ne pense pas que vous ayez besoin d'un ItemSource si vous ne générez pas automatiquement les colonnes. Edité pour refléter cela. –

+0

Une autre option serait cependant de faire un emballage simple qui a deux propriétés définies pour chaque type de vos deux sources d'éléments. Vous pouvez ensuite définir la source de l'élément sur cette enveloppe et référencer chaque source d'élément dans l'encapsuleur en utilisant la même notation point –