2016-08-22 5 views
0

Hallo würde ich verbindliche Liste für dieses Objekt zu Datenraster mag:WPF - Bindung zwei Listen an Datagrid

class DataGridRows 
{ 
    public int Number{get; set;} 
    public int Avg {get; set;} 
    public List<Item> Items{get; set;} 
} 

class Item 
{ 
    public int Number{get; set;} 
    public int Avg {get; set;} 
} 

Und XAML ist:

<DataGrid ItemsSource="{Binding DataGridRows, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding Avg}" FontSize="10"/> 
     <DataGridTextColumn Binding="{Binding Number}" FontSize="10"/> 
     <DataGridTextColumn Binding="{Binding Items.Avg}" Header="{Binding Items.Number}"></DataGridTextColumn> 
    </DataGrid.Columns> 

Dies ist nicht korrekt. Zeige keine Daten aus der inneren Liste.

+1

'Items.Avg' ist falscher Bindungsweg. 'Items [0] .Avg' und' Items [0] .Number' sollten die Daten des 1. Items anzeigen. Wenn Sie * alle * Daten benötigen, verwenden Sie besser die Template-Spalte – ASh

+0

Danke, aber ich weiß nicht, wie ich es verwenden soll. Bitte zeig mir das? – bluray

+0

Können Sie Ihr ViewModel veröffentlichen? Was ist der DataGrid-Datenkontext? – Jose

Antwort

0
<DataGrid ItemsSource="{Binding Items, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False"> 

Geben Sie die Liste <> Objekte als ItemsSource. Da die Liste Objekte von Item enthält, können Sie die Eigenschaften der Item-Klasse an das Datagrid binden.

C#

class DataGridRows 
{ 
    public List<Item> Items{get; set;} 
} 

class Item 
{ 
    public int Number{get; set;} 
    public int Avg {get; set;} 
} 

XAML

<DataGridTemplateColumn Width="230" Header="Header Text" IsReadOnly="True" CanUserResize="False" > 
    <DataGridTemplateColumn.CellTemplate > 
     <DataTemplate> 
     <TextBlock Text="{Binding Number}" Foreground="White" HorizontalAlignment="Left" TextAlignment="Left" Margin="3,0,0,0" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

<DataGridTemplateColumn Width="230" Header="Header Text" IsReadOnly="True" CanUserResize="False" > 
     <DataGridTemplateColumn.CellTemplate > 
      <DataTemplate> 
      <TextBlock Text="{Binding Avg}" Foreground="White" HorizontalAlignment="Left" TextAlignment="Left" Margin="3,0,0,0" /> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn> 

Sie können ganz einfach ein DataGridTemplate wie folgt verwenden.

+0

Sie vermuten, dass DataGridRows sein DataGrid DataContext ist – Jose

+0

Danke, aber meine DataContext ist eine Liste von DataGridRows. Meine Tabelle muss wie folgt aussehen: Line1: 'DataGridRows.Number | DataGridRows.Avg | DataGridRows.Items [0] .Anzahl | DataGridRows.Items [0] .Avg' Netz2: ' DataGridRows.Number | DataGridRows.Avg | DataGridRows.Items [1] .Number | DataGridRows.Items [1] .Avg' Eigenschaften Number und Avg von DataGridRows sind Titel der Zeile und in Items sind Werte. – bluray

Verwandte Themen