Sto lavorando con la griglia di dati WPF Toolkit e lo scorrimento è estremamente lento al momento. La griglia ha 84 colonne e 805 righe. (Comprese 3 colonne fisse e l'intestazione è fissa.) Lo scorrimento sia in orizzontale che in verticale è estremamente lento. La virtualizzazione è attiva e ho abilitato la virtualizzazione delle colonne e la virtualizzazione delle righe esplicitamente in xaml. C'è qualcosa a cui prestare attenzione che può davvero influire sulle prestazioni, come i metodi di associazione, o che cosa è xaml in ogni esempio di cellula?Prestazioni Datagrid WPF
Una cosa da notare è che sto aggiungendo dinamicamente le colonne alla creazione del datagrid. Potrebbe avere effetto su qualcosa? (Creo anche dinamicamente il modello di cella allo stesso tempo in modo che i miei binding siano impostati correttamente.)
Di seguito è riportato il codice del modello per la maggior parte delle celle generate. Fondamentalmente per le colonne che ho bisogno di aggiungere dinamicamente (che è la maggior parte di esse), faccio scorrere il mio elenco e aggiungo le colonne usando il metodo AddColumn, inoltre creo dinamicamente il modello in modo che le istruzioni di binding indicizzino correttamente l'elemento giusto nella raccolta per quella colonna. Il modello non è troppo complesso, solo due TextBlocks, ma io lego quattro diverse proprietà su ciascuno. Sembra come se fossi in grado di spremere un po 'di più le prestazioni da cambiamenti le associazioni di OneWay:
private void AddColumn(string s, int index)
{
DataGridTemplateColumn column = new DataGridTemplateColumn();
column.Header = s;
//Set template for inner cell's two rectangles
column.CellTemplate = CreateFactViewModelTemplate(index);
//Set Style for header, ie rotate 90 degrees
column.HeaderStyle = (Style)dgMatrix.Resources["HeaderRotateStyle"];
column.Width = DataGridLength.Auto;
dgMatrix.Columns.Add(column);
}
//this method builds the template for each column in order to properly bind the rectangles to their color
private static DataTemplate CreateFactViewModelTemplate(int index)
{
string xamlTemplateFormat =
@"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column=""0"" MinHeight=""10"" MinWidth=""10"" HorizontalAlignment=""Stretch"" Padding=""3 1 3 1"" TextAlignment=""Center"" Foreground=""{Binding Path=FactViewModels[~Index~].LeftForeColor,Mode=OneWay}"" Background=""{Binding Path=FactViewModels[~Index~].LeftColor,Mode=OneWay}"" Text=""{Binding Path=FactViewModels[~Index~].LeftScore,Mode=OneWay}"" />
<TextBlock Grid.Column=""1"" MinHeight=""10"" MinWidth=""10"" HorizontalAlignment=""Stretch"" Padding=""3 1 3 1"" TextAlignment=""Center"" Foreground=""{Binding Path=FactViewModels[~Index~].RightForeColor,Mode=OneWay}"" Background=""{Binding Path=FactViewModels[~Index~].RightColor,Mode=OneWay}"" Text=""{Binding Path=FactViewModels[~Index~].RightScore,Mode=OneWay}"" />
</Grid>
</DataTemplate>";
string xamlTemplate = xamlTemplateFormat.Replace("~Index~", index.ToString());
return (DataTemplate)XamlReader.Parse(xamlTemplate);
}
Sì, Microsoft Excel è circa 100 volte più veloce persino dei più veloci controlli di datagrid commerciali WPF. Datagrids evidenzia davvero i punti deboli di WPF. – Damien
Il datagrid di Delphi vecchio di 15 anni viene eseguito più rapidamente su hardware vecchio di 15 anni. – KornMuffin