Я использую datagridview, чтобы показать мои собственные элементы в нем как List(Of MyStuff)
, и он работает довольно тихо. Когда мой класс меняет содержимое, DataGrid не меняется. Мне нужно сделать DataGrid1.Items.Refresh
, и предметы станут обновлениями.
Но теперь мой список содержит 700 элементов, а метод .Refresh
занимает около 15 секунд только потому, что один элемент изменился. Я искал любой "UpdateContent" или "RowUpdate" или "RefreshRow", но ничего не нашел. Как правильно обновлять отдельные строки?
Private LCommand As New List(Of MyLogEntry)
Me.dgv.DataContext = Me.LCommand
Me._LastUpdate = DateTime.MinValue
Me._CurrentIndex = -1
Call UpdateDgv()
Private Sub UpdateDgv()
Application.Current.Dispatcher.Invoke(AsyncRefresh)
End Sub
Private Sub RefreshDgvAsync()
Try
Me.dgv.SelectedIndex = Me._CurrentIndex
Me.dgv.ScrollIntoView(Me.dgv.SelectedItem)
Catch ex As Exception
End Try
If DateTime.Now.Subtract(Me._LastUpdate).TotalSeconds > 60 Then Me.dgv.Items.Refresh()
Me._LastUpdate = DateTime.Now
End Sub
<DataGrid x:Name="dgv" Grid.Row="1" RowHeight="20" AutoGenerateColumns="False" Grid.Column="1" ItemsSource="{Binding}" CanUserAddRows="False" VerticalScrollBarVisibility="Auto" ClipToBounds="True" GridLinesVisibility="Horizontal">
<DataGrid.Columns>
<DataGridTextColumn Header="N°" Binding="{Binding Index}" Width="SizeToCells" MinWidth="30" IsReadOnly="True" />
<!--<DataGridCheckBoxColumn Header="OK" Binding="{Binding Successfully}" Width="SizeToCells" MinWidth="35" IsReadOnly="True" Visibility="Collapsed" />-->
<DataGridTemplateColumn Header="State" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image x:Name="imgState" Source="{Binding StateImageUrl}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Logentry" Binding="{Binding Title}" Width="SizeToHeader" MinWidth="80" IsReadOnly="True" FontWeight="Bold" />
<DataGridTextColumn Header="Action" Binding="{Binding Description}" Width="SizeToCells" MinWidth="80" IsReadOnly="True" FontSize="12" />
<DataGridCheckBoxColumn Header="Available" Binding="{Binding Necessary}" Width="Auto" MinWidth="35" IsReadOnly="True" />
<DataGridTextColumn Header="Log" Binding="{Binding Log}" Width="*" MinWidth="50" IsReadOnly="False" FontSize="8" Foreground="Gray" />
</DataGrid.Columns>
</DataGrid>