Hi,
I have a WPF application. I am using Telerik controls v4.0.30319.
I am running into memory leaks using the RadGridView. The first scenario is straight forward, I am binding to a ViewModel’s Observable Collection but when I update the Collection it does not release the memory for the old objects. The second scenario I have created DataTemplate with Textbox’s in the rows and the RadGridView will not release the textbox’s.
<myViews:BaseUserControl xmlns:myViews="clr-namespace:EnconWPF.Views"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
x:Class="EnconWPF.Views.ScreenBdetl"
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:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:my="clr-namespace:EnconWPF"
xmlns:myViewModel="clr-namespace:EnconWPF.ViewModels"
mc:Ignorable="d"
d:DesignWidth="950">
<myViews:BaseUserControl.Resources>
<Style TargetType="my:CoreTextBox"
BasedOn="{StaticResource {telerik:ThemeResourceKey ThemeType=telerik:Windows7Theme, ElementType=TextBox}}" />
<my:NullableStringConverter x:Key="NullableStringConverter" />
<my:BwzConverter x:Key="BwzConverter" />
<my:PhoneNumberConverter x:Key="PhoneNumberConverter" />
</myViews:BaseUserControl.Resources>
<Grid x:Name="LayoutRoot"
Style="{StaticResource GradientBlueGridStyle}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="85" />
<RowDefinition Height="0" />
<RowDefinition Height="26" />
<RowDefinition Height="26" />
<RowDefinition Height="26" />
<RowDefinition Height="26" />
<RowDefinition Height="26" />
<RowDefinition Height="26" />
<RowDefinition Height="26" />
<RowDefinition Height="26" />
<RowDefinition Height="26" />
<RowDefinition Height="26" />
<RowDefinition Height="26" />
<RowDefinition Height="26" />
<RowDefinition Height="26" />
<RowDefinition Height="26" />
<RowDefinition Height="26" />
<RowDefinition Height="26" />
<RowDefinition Height="26" />
<RowDefinition Height="26" />
<RowDefinition Height="26" />
<RowDefinition Height="26" />
<RowDefinition Height="30*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20" />
<ColumnDefinition Width="30" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="30" />
<ColumnDefinition Width="20" />
</Grid.ColumnDefinitions>
<my:Toolbar x:Name="toolBar"
Height="85"
Grid.Row="0"
Grid.Column="0"
Grid.ColumnSpan="5" />
<TextBlock Text="{Binding ApplicationStrings.BROKER, Source={StaticResource ResourceWrapper}}"
Grid.Row="3"
Grid.Column="2"
Margin="10,0,0,0" />
<my:CoreTextBox Grid.Row="3"
Grid.Column="2"
Margin="120,0,0,0"
Width="54"
Text="{Binding Account.ACCOUNTNUMBER, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=True, Converter={StaticResource BwzConverter}}"
IsReadOnly="True" Display="ModifyAdd"
IsTabStop="{Binding Path=IsControlTabStop}"
MaxLength="6"
TabIndex="1" />
<my:CoreTextBox Grid.Row="3"
Grid.Column="2"
Margin="185,0,0,0"
Width="270"
Text="{Binding Account.CONDENSEDNAMEACT, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=True}"
IsReadOnly="True" Display="ModifyAdd"
IsTabStop="{Binding Path=IsControlTabStop}"
MaxLength="30"
TabIndex="2" />
<TextBlock Text="{Binding ApplicationStrings.BROKER_NUM, Source={StaticResource ResourceWrapper}}"
Grid.Row="5"
Grid.Column="2"
Margin="10,0,0,0" />
<my:CoreTextBox Grid.Row="5"
Grid.Column="2"
Margin="120,0,0,0"
MaxLength="30"
Width="270"
Text="{Binding Account.ACCOUNTNAME, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=True}"
IsReadOnly="True" Display="ModifyAdd"
IsTabStop="{Binding Path=IsControlTabStop}"
TabIndex="4" />
<TextBlock Text="{Binding ApplicationStrings.ADDRESS, Source={StaticResource ResourceWrapper}}"
Grid.Row="6"
Grid.Column="2"
Margin="10,0,0,0" />
<my:CoreTextBox Grid.Row="6"
Grid.Column="2"
Margin="120,0,0,0"
MaxLength="30"
Width="270"
Text="{Binding Account.ADDRESS1, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=True}"
IsReadOnly="True" Display="ModifyAdd"
IsTabStop="{Binding Path=IsControlTabStop}"
TabIndex="6" />
<TextBlock Text=""
Grid.Row="7"
Grid.Column="2"
Margin="170,0,0,0" />
<my:CoreTextBox Grid.Row="7"
Grid.Column="2"
Margin="120,0,0,0"
Width="270"
Height="24"
Text="{Binding Account.ADDRESS2, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=True}"
IsReadOnly="True" Display="ModifyAdd"
IsTabStop="{Binding Path=IsControlTabStop}"
MaxLength="30"
TabIndex="7" />
<TextBlock Text=""
Grid.Row="8"
Grid.Column="2"
Margin="170,0,0,0" />
<my:CoreTextBox Grid.Row="8"
Grid.Column="2"
Margin="120,0,0,0"
Width="270"
Text="{Binding Account.ADDRESS3, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=True}"
IsReadOnly="True" Display="ModifyAdd"
IsTabStop="{Binding Path=IsControlTabStop}"
MaxLength="30"
TabIndex="8" />
<TextBlock Text=""
Grid.Row="9"
Grid.Column="2"
Margin="170,0,0,0" />
<my:CoreTextBox Grid.Row="9"
Grid.Column="2"
Margin="120,0,0,0"
Width="270"
Text="{Binding Account.ADDRESS4, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=True}"
IsReadOnly="True" Display="ModifyAdd"
IsTabStop="{Binding Path=IsControlTabStop}"
MaxLength="30"
TabIndex="9" />
<TextBlock Text="{Binding ApplicationStrings.PROVINCE, Source={StaticResource ResourceWrapper}}"
Grid.Row="10"
Grid.Column="2"
Margin="10,0,0,0" />
<my:CoreTextBox Grid.Row="10"
Grid.Column="2"
Margin="120,0,0,0"
MaxLength="2"
Width="26"
Text="{Binding Ml.ML_CODE_MAST, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=True}"
IsEnabled="{Binding Path=IsControlEnabled}"
IsReadOnly="True"
Display="InquireModifyAdd"
IsTabStop="False"
TabIndex="10" />
<TextBlock Text=""
Grid.Row="10"
Grid.Column="2"
Margin="200,0,0,0"
Visibility="{Binding Path=IsHideInFind}" />
<my:CoreTextBox Grid.Row="10"
Grid.Column="2"
Margin="180,0,0,0"
Width="180"
Text="{Binding Ml.ML_NAME_MAST, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=True}"
IsEnabled="{Binding Path=IsControlEnabled}"
IsReadOnly="True"
Display="InquireModifyAdd"
IsTabStop="False"
MaxLength="20"
Visibility="{Binding Path=IsHideInFind}"
TabIndex="11" />
<TextBlock Text="{Binding ApplicationStrings.POSTAL, Source={StaticResource ResourceWrapper}}"
Grid.Row="10"
Grid.Column="2"
Margin="500,0,0,0" />
<my:CoreTextBox Grid.Row="10"
Grid.Column="2"
Margin="580,0,0,0"
MaxLength="10"
Width="90"
Text="{Binding Account.ZIPCODE, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=True}"
IsReadOnly="True" Display="ModifyAdd"
IsTabStop="{Binding Path=IsControlTabStop}"
TabIndex="12" />
<TextBlock Text="{Binding ApplicationStrings.PHONE, Source={StaticResource ResourceWrapper}}"
Grid.Row="5"
Grid.Column="2"
Margin="500,0,0,0" />
<my:CoreTextBox Grid.Row="5"
Grid.Column="2"
Margin="580,0,0,0"
Width="100"
Height="24"
HorizontalAlignment="Left"
FontSize="11"
Text="{Binding Account.PHONENUM, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=True, Converter={StaticResource PhoneNumberConverter}}"
IsReadOnly="True" Display="ModifyAdd"
IsTabStop="{Binding Path=IsControlTabStop}"
MaxLength="12"
TabIndex="5" />
<TextBlock Text="{Binding ApplicationStrings.ACTDEAD, Source={StaticResource ResourceWrapper}}"
Grid.Row="3"
Grid.Column="2"
Margin="500,0,0,0" />
<my:CoreTextBox Grid.Row="3"
Grid.Column="2"
Margin="580,0,0,0"
MaxLength="2"
Width="26"
Height="24"
HorizontalAlignment="Left"
FontSize="11"
Text="{Binding Account.ACTIVEDEAD, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=True}"
IsReadOnly="True" Display="ModifyAdd"
IsTabStop="{Binding Path=IsControlTabStop}"
TabIndex="3" />
<Border Width="Auto"
Height="25"
Grid.Row="12"
Grid.Column="1"
Grid.ColumnSpan="3"
CornerRadius="5,5,0,0"
Visibility="{Binding Path=IsHideInFind}"
Background="#FF112A5D" />
<Button Height="20"
x:Name="Append"
Width="20"
HorizontalAlignment="Left"
Grid.Column="1"
Margin="5,0,0,0"
Grid.Row="12"
ToolTipService.ToolTip="{Binding Source={StaticResource ResourceWrapper}, Path=ApplicationStrings.APPENDBUTTON}"
Style="{StaticResource AppendButtonStyle}"
Visibility="{Binding IsAppendVisible}"
Command="{Binding AppendCommand}">
</Button>
<Border Width="Auto"
Height="Auto"
CornerRadius="3"
Grid.Row="13"
Grid.Column="1"
Grid.ColumnSpan="3"
Grid.RowSpan="10"
HorizontalAlignment="Left"
Visibility="{Binding Path=IsHideInFind}">
</Border>
<telerik:RadGridView x:Name="SCREEN_BDETL_DetailList"
Grid.Row="13"
Grid.Column="1"
Grid.ColumnSpan="3"
Grid.RowSpan="12"
Height="255"
ItemsSource="{Binding BrokerCollection}"
Visibility="{Binding Path=IsHideInFind}"
ShowGroupPanel="True"
IsEnabled="{Binding Path= IsControlEnabled}"
Width="Auto"
telerik:StyleManager.Theme="Windows7"
VerticalAlignment="Top"
AutoGenerateColumns="False"
CanUserFreezeColumns="False"
IsFilteringAllowed="True"
IsReadOnly="True"
RowIndicatorVisibility="Collapsed"
FontFamily="Arial"
IsTabStop="False"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto">
<telerik:RadGridView.Resources>
<DataTemplate x:Key="EditButtonColumnResource">
<Button x:Name="EditRowCommand"
Style="{StaticResource GridImageButton}"
Command="{Binding DataContext.EditDetailCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type telerik:RadGridView}}}"
CommandParameter="{Binding RelativeSource={RelativeSource Self}}">
<Button.Content>
<Image Source="/EnconWPF;component/Images/Toolbar/Edit.png"
Width="13"
Height="13"
Stretch="Uniform"
ToolTipService.ToolTip="{Binding Source={StaticResource ResourceWrapper}, Path=ApplicationStrings.EditButton}" />
</Button.Content>
</Button>
</DataTemplate>
<DataTemplate x:Key="DeptResourceColumn">
<my:CoreComboBox IsEditable="True"
SelectedValue="{Binding Dept, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true, Converter={StaticResource NullableStringConverter}}"
IsReadOnly="True"
Display="Inquire"
Width="60"
TabIndex="15"
Values=",SRD,AE,COIN,DO,MAIN,ACCT" />
</DataTemplate>
<DataTemplate x:Key="FaxResourceColumn">
<my:CoreTextBox Text="{Binding Fax, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=True, Converter={StaticResource PhoneNumberConverter}}"
MaxLength="16"
Width="124"
TabIndex="16"
Display="Inquire" />
</DataTemplate>
<DataTemplate x:Key="EmailResourceColumn">
<my:CoreTextBox Text="{Binding Email, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=True}"
MaxLength="80"
Width="530"
TabIndex="17"
Display="Inquire" />
</DataTemplate>
<DataTemplate x:Key="TierResourceColumn">
<my:CoreTextBox Text="{Binding Tier, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=True}"
Width="50"
TabIndex="18"
Display="Inquire" />
</DataTemplate>
<DataTemplate x:Key="CancelColumnResource">
<Button x:Name="CancelRowCommand"
Style="{StaticResource GridImageButton}"
IsEnabled="{Binding IsAltered, Mode=TwoWay}"
Command="{Binding DataContext.CancelDetailCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type telerik:RadGridView}}}"
CommandParameter="{Binding RelativeSource={RelativeSource Self}}">
<Button.Content>
<Image Source="/EnconWPF;component/Images/Toolbar/Undo.png"
Width="13"
Height="13"
Stretch="Uniform"
ToolTipService.ToolTip="{Binding Source={StaticResource ResourceWrapper}, Path=ApplicationStrings.CancelDetailButton}" />
</Button.Content>
</Button>
</DataTemplate>
<DataTemplate x:Key="DeleteColoumnResource"
x:Name="DeleteColoumnResource">
<Button x:Name="DeleteRowCommand"
Style="{StaticResource GridImageButton}"
Command="{Binding DataContext.DeleteDetailCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type telerik:RadGridView}}}"
CommandParameter="{Binding RelativeSource={RelativeSource Self}}">
<Button.Content>
<Image Source="/EnconWPF;component/Images/Toolbar/Delete.png"
Width="13"
Height="13"
Stretch="Uniform"
ToolTipService.ToolTip="{Binding Source={StaticResource ResourceWrapper}, Path=ApplicationStrings.DeleteDetailButton}" />
</Button.Content>
</Button>
</DataTemplate>
</telerik:RadGridView.Resources>
<telerik:RadGridView.Columns>
<telerik:GridViewColumn Width="30"
CellTemplate="{StaticResource EditButtonColumnResource}">
</telerik:GridViewColumn>
<telerik:GridViewDataColumn Width="70"
DataMemberBinding="{Binding Dept, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=True}"
IsSortable="True"
CellTemplate="{StaticResource DeptResourceColumn}">
<telerik:GridViewDataColumn.Header>
<StackPanel>
<TextBlock Text="{Binding ApplicationStrings.DEPT, Source={StaticResource ResourceWrapper}}"
Style="{StaticResource GridHeaderStyle}" />
</StackPanel>
</telerik:GridViewDataColumn.Header>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn Width="134"
DataMemberBinding="{Binding Fax, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=True}"
IsSortable="True"
CellTemplate="{StaticResource FaxResourceColumn}">
<telerik:GridViewDataColumn.Header>
<StackPanel>
<TextBlock Text="{Binding ApplicationStrings.FAXNUMBER, Source={StaticResource ResourceWrapper}}"
Style="{StaticResource GridHeaderStyle}" />
</StackPanel>
</telerik:GridViewDataColumn.Header>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn Width="520"
DataMemberBinding="{Binding Email, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=True}"
IsSortable="True"
CellTemplate="{StaticResource EmailResourceColumn}">
<telerik:GridViewDataColumn.Header>
<StackPanel>
<TextBlock Text="{Binding ApplicationStrings.CONTACTEMAIL, Source={StaticResource ResourceWrapper}}"
Style="{StaticResource GridHeaderStyle}" />
</StackPanel>
</telerik:GridViewDataColumn.Header>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn Width="60"
DataMemberBinding="{Binding Tier, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=True}"
IsSortable="True"
CellTemplate="{StaticResource TierResourceColumn}">
<telerik:GridViewDataColumn.Header>
<StackPanel>
<TextBlock Text="{Binding ApplicationStrings.TIER, Source={StaticResource ResourceWrapper}}"
Style="{StaticResource GridHeaderStyle}" />
</StackPanel>
</telerik:GridViewDataColumn.Header>
</telerik:GridViewDataColumn>
<telerik:GridViewColumn Width="30"
CellTemplate="{StaticResource CancelColumnResource}">
</telerik:GridViewColumn>
<telerik:GridViewColumn Width="30"
CellTemplate="{StaticResource DeleteColoumnResource}">
</telerik:GridViewColumn>
</telerik:RadGridView.Columns>
</telerik:RadGridView>
</Grid>
</Grid>
</myViews:BaseUserControl>
Any help would be much appreciated; our company has used Telerik controls for all of our Silverlight projects and would like to continue using them for WPF once I have this figured out.
Pat