2013-08-09 10 views
5

Attualmente sto lavorando all'applicazione WPF (con MVVM) in cui sto visualizzando i dati nello DataGridView.Associazione dati WPF con colonne personalizzate

<DataGrid RowHeaderWidth="0" ItemsSource="{Binding PartsList,UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Item Name" IsReadOnly="True" Width="*" Binding="{Binding ProductName}"></DataGridTextColumn> 
     <DataGridTextColumn Header="Model Name" IsReadOnly="True" Width="*" Binding="{Binding CarModelName}"></DataGridTextColumn> 
     <DataGridTextColumn Header="Company Name" IsReadOnly="True" Width="*" Binding="{Binding CompanName}"></DataGridTextColumn> 
     <DataGridTextColumn Header="Price" IsReadOnly="True" Width="*" Binding="{Binding Rate}"> 
    </DataGrid.Columns> 
</DataGrid> 

Qui PartsList è un ObservableCollection di un'entità parte.

Ora voglio aggiungere colonna personalizzata allo DataGrid che mostra lo sconto e un'altra colonna che mostra l'importo netto. Come posso fare questo?

Si prega di dare una buona idea per fare questo perché ho bisogno di lavorare con migliaia di record, quindi le prestazioni sono molto importanti per me.

Grazie in anticipo.

+4

Non puoi semplicemente aggiungere "sconto" e "importo netto" colonne di DataGrid al tuo XAML sopra, e hanno queste proprietà in la tua classe di modello della vista Part, o ci sono altri requisiti di colonna "personalizzati"? –

+0

Non sono necessarie altre colonne personalizzate. Lavorerò sulla soluzione. Grazie! – rupareliab

+0

oppure puoi semplicemente aggiungere colonne e disporre di convertitori per calcolare i valori – Inga

risposta

0

tenta di aggiungere colonne sulla Loaded caso di DataGrid:

private void DataGrid_Loaded_1(object sender, RoutedEventArgs e) 
{ 
    dataGrid.Columns.Add((DataGridTextColumn)this.Resources["DiscountColumn"]); 
    dataGrid.Columns.Add((DataGridTextColumn)this.Resources["NetAmountColumn"]); 

    //Alternatively you can create columns in .cs like 

    dataGrid.Columns.Add(new DataGridTextColumn() { Header = "Dicount", Binding = new Binding("Discount") }); 
    dataGrid.Columns.Add(new DataGridTextColumn() { Header = "Net Amount", Binding = new Binding("NetAmount") }); 
} 
<Window.Resources> 
    <DataGridTextColumn x:Key="DiscountColumn" Header="Discount" IsReadOnly="True" Width="*" Binding="{Binding Discount}"/> 
    <DataGridTextColumn x:Key="NetAmountColumn" Header="Net Amount" IsReadOnly="True" Width="*" Binding="{Binding NetAmount}"/> 
</Window.Resources> 

<DataGrid RowHeaderWidth="0" x:Name="dataGrid" Loaded="DataGrid_Loaded_1" /> 
+4

Grazie per il tuo suggerimento ma sto utilizzando MVVM. Quindi puoi guidarmi come posso farlo con MVVM? – rupareliab

+0

non è possibile aggiungere colonne in ViewModel perché per questo è necessario il riferimento di datagrid. – ethicallogics

+0

Ok, ci proverò con un modo diverso. – rupareliab