2010-03-12 4 views
2

J'essaie de créer une application Silverlight simple qui implique l'analyse d'un fichier CSV et l'affichage des résultats dans un DataGrid. J'ai configuré mon application pour analyser le fichier CSV pour renvoyer un List<CSVTransaction> qui contient des propriétés avec des noms: Date, Payee, Category, Memo, Inflow, Outflow.Comment lier une liste <object> à un DataGrid dans Silverlight?

L'utilisateur clique sur un bouton pour sélectionner un fichier à analyser, à quel point je souhaite que l'objet DataGrid soit rempli. Je pense que je veux utiliser la liaison de données, mais je n'arrive pas à comprendre comment faire apparaître les données dans la grille.

Mon XAML pour la DataGrid ressemble à ceci:

<data:DataGrid IsEnabled="False" x:Name="TransactionsPreview"> 
    <data:DataGrid.Columns> 
     <data:DataGridTextColumn Header="Date" 
           Binding="{Binding Date}" /> 
     <data:DataGridTextColumn Header="Payee" 
           Binding="{Binding Payee}"/> 
     <data:DataGridTextColumn Header="Category" 
           Binding="{Binding Category}"/> 
     <data:DataGridTextColumn Header="Memo" 
           Binding="{Binding Memo}"/> 
     <data:DataGridTextColumn Header="Inflow" 
           Binding="{Binding Inflow}"/> 
     <data:DataGridTextColumn Header="Outflow" 
           Binding="{Binding Outflow}"/> 
    </data:DataGrid.Columns> 
</data:DataGrid> 

Le code-behind pour le fichier xaml.cs ressemble à ceci:

private void OpenCsvFile_Click(object sender, RoutedEventArgs e) 
    { 
     try 
     { 
      CsvTransObject csvTO = new CsvTransObject.ParseCSV(); 
      //This returns a List<CsvTransaction> and passes it 
      //to a method which is supposed to set the DataContext 
      //for the DataGrid to be equal to the list. 
      BindCsvTransactions(csvTO.CsvTransactions);     
      TransactionsPreview.IsEnabled = true; 
      MessageBox.Show("The CSV file has a valid header and has been loaded successfully."); 
     } 

     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

    private void BindCsvTransactions(List<CsvTransaction> listYct) 
    { 
     TransactionsPreview.DataContext = listYct; 
    } 

Ma pensée est de lier les propriétés à CsvTransaction chaque DataGridTextColumn dans le code XAML, puis définissez le DataContext pour le DataGrid au List<CsvTransaction lors de l'exécution, mais cela ne fonctionne pas.

Des idées sur la façon dont je pourrais aborder cela (ou faire mieux)?

Répondre

2

Vous ne devez pas affecter la source de données à la propriété ItemsSource du contrôle Datagrid?

Questions connexes