wpf datagrid メモリリーク
wpfのdatagridを利用してデータ表示しております。
1レコードを多段構成で表示するため、ユーザーコントロールにdatagridを配置し、グリッド内に各コントロールを配置する方法で実現しております。
チェックボックスも配置しており、スクロール時に初期化される現象が発生したため、仮想化をOFFにしております。
少ないデータ件数であれば問題ないのですが、大量データ(3500件程度)の場合には
メモリリークしてしまいます。
DataGridにチェックボックスを配置した場合の実装で、上記の事象を
改善する方法をご存知の方がいらっしゃいましたらご教授頂けると幸いです。
以下2つが実装しているxamlとなります。
★Grid_Tab_Roke_Main
ユーザーコントロールにDataGridを配置したものとして実装しています。
<UserControl x:Class="Grid_Tab_Roke_Main"
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:_XX_WPF商品管理"
mc:Ignorable="d"
d:DesignHeight="200.373" d:DesignWidth="300" Height="Auto" Width="Auto">
<DataGrid ItemsSource="{Binding}" VirtualizingStackPanel.IsVirtualizing="False" VirtualizingStackPanel.VirtualizationMode="Standard" EnableColumnVirtualization="False" EnableRowVirtualization="False" ScrollViewer.CanContentScroll="True" ScrollViewer.IsDeferredScrollingEnabled="True" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" HeadersVisibility="None" Margin="0,0,0,0">
<DataGrid.Columns>
<DataGridTemplateColumn >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<local:Grid_Tab_Roke_Detail />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</UserControl>
★Grid_Tab_Roke_Detail
グリッド内にコントロールを配置しており、データテーブルよりバインドしています。項目は全て数点を抜粋して記載しております。
<UserControl x:Class="Grid_Tab_Roke_Detail"
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"
mc:Ignorable="d"
Height="70" Width="1227" Background="White" Loaded="UserControl_Loaded">
<Grid>
<TextBox x:Name="Text_Roke" Text="{Binding ロケーション名, Mode=OneTime, StringFormat=\{0:N0\}}" HorizontalAlignment="Left" Height="21" Margin="56,22,0,27" TextWrapping="Wrap" VerticalAlignment="Center" Width="181" RenderTransformOrigin="0.406,0.026" Background="{x:Null}" FontFamily="Arial" VerticalContentAlignment="Center" FontWeight="Bold" MaxWidth="200" MinHeight="16" IsHitTestVisible="True" FontSize="16" Foreground="Black"/>
<TextBox x:Name="Text_HinCD" Text="{Binding 商品コード, Mode=OneTime, StringFormat=\{0:N0\}}" HorizontalAlignment="Left" Height="21" Margin="242,22,0,27" TextWrapping="Wrap" VerticalAlignment="Center" Width="62" RenderTransformOrigin="0.406,0.026" Background="{x:Null}" FontFamily="Arial" VerticalContentAlignment="Center" FontWeight="Bold" MaxWidth="150" MinHeight="16" IsHitTestVisible="True" FontSize="16" Foreground="Black"/>
<CheckBox x:Name="Chk_Sentaku" Content="選択" IsChecked="{Binding IsSelected.Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Margin="3,3,0,0" VerticalAlignment="Top" Width="48" Height="65" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"
/>
<TextBox x:Name="Text_HinNM" Text="{Binding 商品名, Mode=TwoWay, StringFormat=\{0:N0\}}" HorizontalAlignment="Left" Height="21" Margin="304,22,0,27" TextWrapping="Wrap" VerticalAlignment="Center" Width="330" RenderTransformOrigin="0.406,0.026" Background="{x:Null}" FontFamily="Arial" VerticalContentAlignment="Center" FontWeight="Bold" MaxWidth="350" MinHeight="16" IsHitTestVisible="True" FontSize="16" Foreground="Black"/>
</Grid>
</UserControl>
お礼
回答ありがとうございます。 回答の返事が遅くなってすみません。 解りにくい説明で申し訳ありません。 固定というのは「xmlns:x」のコロンの次に記述されている「x」です。 「Visual Studio 2008」の評価版でSilverlightのプロジェクトを作成したらデフォルトでXAMLが作成されて、XAMLのコードを見てみたらこの「xmlns:x」と記述されていたので固定なのかと思って投稿させていただきました。 試しに下記のように「x」を「y」や「a」とかに変更してみたらビルドしてもエラーになりませんでした。コロンの次に記述される文字は任意で変えてもいいのでしょうか。 初心者レベルでも理解できるようにご教授いただけませんでしょうか。 お手数をお掛けしますが宜しくお願いします。 失礼します。