#c# #wpf #performance #sorting #datagrid
#c# #wpf #Производительность #сортировка #сетка данных
Вопрос:
У меня есть сетка данных WPF с 5 столбцами и 60 строками. Когда я сортирую строки, нажимая на заголовок столбца, возникает небольшая задержка. Если я использую winform datagrid для сортировки одних и тех же элементов, это намного быстрее.
Вот мой код привязки и мое определение XAML:
public System.Data.DataTable Users{ get; set; }
public UsersView(IUserRepository userRepository)
{
Repository = userRepository;
InitializeComponent();
Users = Repository.GetAll();
usersDataGrid.DataContext = Users;
}
<UserControl x:Class="FundTrading.UsersView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:FundTrading.Views"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300" Height="Auto" Width="Auto">
<DataGrid IsReadOnly="true" SelectionMode="Single" AutoGenerateColumns="False" x:Name="usersDataGrid" ItemsSource="{Binding}" HorizontalGridLinesBrush="Lavender" VerticalGridLinesBrush="Lavender" RowBackground="LightYellow" >
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding UserId}" Width="100" />
<DataGridTextColumn Header="Login Id" Binding="{Binding LoginName}" Width="100" />
<DataGridTextColumn Header="Name" Binding="{Binding Description}" Width="300" />
<DataGridTextColumn Header="Active" Binding="{Binding Active}" Width="100" />
<DataGridTextColumn Header="Role" Binding="{Binding RoleName}" Width="300" />
</DataGrid.Columns>
</DataGrid>
Действительно ли WPF медленнее, чем Winform, или я что-то упускаю?
Большое спасибо
Комментарии:
1. Я бы рекомендовал вам запустить ваш проект в режиме отладки и убедиться, что окно вывода не содержит ошибок привязки при нажатии на заголовок столбца.
2. Он уже работает в режиме отладки, и при нажатии на заголовки столбцов ошибка не появляется.
3. Хорошо, тогда следующим шагом будет изменение типа пользователей на что-то вроде List<User> (или что-то еще, хранящееся в этом System.Data.DataTable). Если это устраняет задержку, то проблема заключается в том, как DataGrid собирает данные из DataTable