/// <summary> /// Dispose the specified disposing. /// </summary> /// <returns>The dispose.</returns> /// <param name="disposing">If set to <c>true</c> disposing.</param> protected override void Dispose(bool disposing) { if (disposing) { CellBase.PropertyChanged -= CellPropertyChanged; CellParent.PropertyChanged -= ParentPropertyChanged; if (CellBase.Section != null) { CellBase.Section.PropertyChanged -= SectionPropertyChanged; CellBase.Section = null; } SelectedBackgroundView?.Dispose(); SelectedBackgroundView = null; Device.BeginInvokeOnMainThread(() => { HintLabel.RemoveFromSuperview(); HintLabel.Dispose(); HintLabel = null; TitleLabel?.Dispose(); TitleLabel = null; DescriptionLabel?.Dispose(); DescriptionLabel = null; IconView.RemoveFromSuperview(); IconView.Image?.Dispose(); IconView.Dispose(); IconView = null; _iconTokenSource?.Dispose(); _iconTokenSource = null; _iconConstraintWidth?.Dispose(); _iconConstraintHeight?.Dispose(); _iconConstraintHeight = null; _iconConstraintWidth = null; ContentStack?.RemoveFromSuperview(); ContentStack?.Dispose(); ContentStack = null; Cell = null; StackV?.RemoveFromSuperview(); StackV?.Dispose(); StackV = null; StackH.RemoveFromSuperview(); StackH.Dispose(); StackH = null; } ); } base.Dispose(disposing); }