Estoy trabajando con la cuadrícula de datos de WPF Toolkit y está desplazándose extremadamente lento en este momento. La grilla tiene 84 columnas y 805 filas. (Incluye 3 columnas fijas y el encabezado está fijo.) El desplazamiento horizontal y vertical es extremadamente lento. La virtualización está activada y he habilitado la virtualización de columnas y la virtualización de filas explícitamente en el xaml. ¿Hay algo de qué preocuparse que realmente pueda afectar el rendimiento, como los métodos de enlace, o qué xaml hay en cada plantilla de celda?WPF Datagrid Performance
Una cosa a tener en cuenta es que estoy agregando dinámicamente las columnas en la creación de la cuadrícula de datos. ¿Podría estar afectando algo? (También creo dinámicamente el celltemplate al mismo tiempo para que mis enlaces se configuren correctamente.)
A continuación se muestra el código de la plantilla para la mayoría de las celdas que se generan. Básicamente para las columnas que necesito agregar dinámicamente (que es la mayoría de ellas), recorro mi lista y agrego las columnas usando el método AddColumn, además construyo dinámicamente la plantilla para que las declaraciones vinculantes indexen correctamente el elemento correcto en la colección para esa columna. La plantilla no es demasiado compleja, solo dos TextBlocks, pero yo vinculo cuatro propiedades diferentes en cada uno. Parece que yo era capaz de exprimir un poco más de rendimiento por los cambios de las fijaciones para 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 es aproximadamente 100 veces más rápido que incluso los controles de cuadrícula de datos WPF comerciales más rápidos. Datagrids realmente resalta las debilidades de WPF. – Damien
La cuadrícula de datos Delphi de 15 años funciona más rápido en un hardware de 15 años. – KornMuffin