Одним из решений является создание самого шаблона реализации IDisposable
, а затем размещение элементов управления в методе Dispose
вашего шаблона. Конечно, это означает, что вам нужна какая-то коллекция для отслеживания созданных вами элементов управления. Вот один из способов сделать это:
public class CustomColumnTemplate :
ITemplate, IDisposable
{
private readonly ICollection<Control> labels = new List<Control>();
public void Dispose()
{
foreach (Control label in this.labels)
label.Dispose();
}
public void InstantiateIn(Control container)
{
//create a new label
Label contentLabel = new Label();
this.labels.Add(contentLabel);
...
//add the label to the cell
container.Controls.Add( contentLabel );
}
}
Теперь вы все еще сталкиваетесь с проблемой утилизации шаблона. Но, по крайней мере, ваш шаблон будет ответственным потребителем памяти, потому что когда вы вызываете Dispose
для шаблона, все его метки будут удалены вместе с ним.
UPDATE
Эта ссылка на MSDN предполагает, что, возможно, в вашем шаблоне нет необходимости реализовывать IDisposable
, потому что элементы управления будут внедрены в дереве элементов управления страницы и автоматически удалены платформой!