2011-07-11 3 views
0

J'ai une classe nomméeWPF ItemSource retourne null

public class testClass 
{ 
    public testClass(string showCode, string urn) 
    { 
     ShowCode = showCode; 
     URN = urn; 
    } 

    public string ShowCode { get; set; } 
    public string URN { get; set; } 
} 

je crée un ArrayList, ajouter à la liste et le lier à un DataGrid WPF

ArrayList l = new ArrayList(); 
l.Add(new testClass("ose11", "7016463")); 
this.grdTestData.ItemsSource = l; 

Cette affiche exactement ce que je veux dans la grille de données.

Maintenant, je veux revenir les données du DataGrid et itérer throught il

IEnumerable<testClass> t = this.grdTestData.ItemsSource as IEnumerable<testClass>; 

..mais 't ' est nul! !! c'est le problème !!

Telle est la définition de DataGrid:

<DataGrid AutoGenerateColumns="False" HorizontalAlignment="Left" Margin="12,66,0,48" Name="grdTestData" Width="200" CanUserAddRows="True" > 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="ShowCode" Binding="{Binding ShowCode}" /> 
     <DataGridTextColumn Header="URN" Binding="{Binding Path=URN}" /> 
    </DataGrid.Columns> 
</DataGrid> 
+0

Veuillez utiliser un format de code approprié, il est difficile de lire votre message. – dowhilefor

Répondre

1

Le ItemsSource est non nul, il est juste que ArrayList n'implémente pas IEnumerable<testClass>, et donc le casting que vous effectuez des retours null. Si vous utilisez

var list = (IEnumerable<testClass>) datagrid.ItemsSource; 

, vous obtiendrez une erreur indiquant que cette distribution n'est pas valide.

Si vous utilisez un List<testClass> au lieu de ArrayList pour la source, le transtypage sera valide et ne renverra pas de valeur nulle.

Si vous ne souhaitez pas utiliser une collection générique, vous pouvez la convertir en ArrayList ou IEnumerable (non-generic) si vous souhaitez disposer d'une interface.

+0

Merci pour l'explication, cela m'a permis de le corriger. Résolu. – ninety