タイトル通りですが、Grid.RowDefinition の <RowDefinition Height="Auto"/> にすると、DataGridの表示が非常に遅くなります(実質フリーズ)。
<RowDefinition Height="*"/> の場合は即表示されます(1秒もかからない)。
例えば、100万件のPersonオブジェクトを表示するコードを書いてみます。
c#
1using System.Collections.ObjectModel; 2using System.Linq; 3 4namespace DataGridPerformanceTest 5{ 6 public class MainWindowViewModel 7 { 8 public ObservableCollection<Person> Persons { get; } = new ObservableCollection<Person>(); 9 10 public MainWindowViewModel() 11 { 12 foreach (var person in Enumerable.Range(1, 1000000).Select(_ => 13 { 14 return new Person() 15 { 16 Id = _, 17 Name = "田中太郎" + _.ToString() 18 }; 19 })) 20 { 21 Persons.Add(person); 22 } 23 } 24 } 25 26 public class Person 27 { 28 public int Id { get; set; } 29 public string Name { get; set; } 30 } 31}
ViewModelで100万件のPersonオブジェクトを生成し、Personsにぶちこみ、
xml
1<Window x:Class="DataGridPerformanceTest.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:local="clr-namespace:DataGridPerformanceTest" 5 Title="MainWindow" Height="350" Width="525"> 6 <Window.DataContext> 7 <local:MainWindowViewModel/> 8 </Window.DataContext> 9 <Grid> 10 <Grid.RowDefinitions> 11 <RowDefinition Height="Auto"/> ← ここをAutoにすると遅い 12 </Grid.RowDefinitions> 13 <DataGrid Grid.Row="0" ItemsSource="{Binding Persons}" /> 14 </Grid> 15</Window>
DataGridで100万件のPersonオブジェクトを表示します。
この時、<RowDefinition Height="Auto" /> にすると動作が重くなり、表示されるまで時間がかかります(実質表示されない)。
一方で、<RowDefinition Height="*" /> にすると動作が軽くなり、1秒もかからず表示されます。
この違いはなんでしょうか。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/10 00:19