2010-09-17 9 views
0

Je cherche des informations sur la façon de fournir des données à DataGrid en utilisant le dictionnaire. Mon cas d'utilisation est: J'ai WebService qui me fournit une table avec le contenu (et les noms de colonnes) que je connais à l'exécution.Comment utiliser Dictionary pour fournir des données (qui sont définies dans runtime) à DataGrid (xaml) dans SL4

Ma mise en œuvre actuelle d'un tuple de données est:

public class GridTuple : Dictionary<string, string> 
    { 

    public GridTuple(IDictionary<string, string> cv, int id) : base(cv) 
    {    
     TupleId = id; 
    } 

    public int TupleId { set; get; } 

    public override string ToString() 
    { 

     string result = TupleId + " "; 
     for (int i = 0; i < ColumnNames.Names.Count; i++) 
     { 
      result += ColumnNames.Names[i] + " " + this[ColumnNames.Names[i]] + " "; 
     } 
     return result; 

    } 
} 

... et la mise en œuvre pour DataGrid en XAML est:

<sdk:DataGrid AutoGenerateColumns="True" HeadersVisibility="All" x:Name="dataGrid" 
        HorizontalAlignment="Left" VerticalAlignment="Top"       

        ItemsSource="{Binding ListOfGridTuples}" MouseLeftButtonUp="dataGrid_MouseLeftButtonUp" 
          SelectionMode="Single" Grid.Column="1" > 

       <sdk:DataGrid.Columns> 
         <!-- ValueForColumn1 is a key in my GridTuple --> 
        <sdk:DataGridTextColumn Binding="{Binding [ValueForColumn1]}" /> 
       </sdk:DataGrid.Columns> 

</sdk:DataGrid> 

...

+0

Résolu. J'ai trouvé cet article - http://blog.bodurov.com/How-to-Bind-Silverlight-DataGrid-From-IEnumerable-of-IDictionary/. J'ai créé Columns with Bindings après ce post. Seul changement que j'ai fait était de mettre un ids de colonnes dans Bindngs dans '[' ']' parce que SL4 fournit un support pour les liaisons de dictionnaires dans xaml: new DataGridTextColumn { Header = "ID", Binding = new Binding ("[ ID] ") }); – Skarab

Répondre