diff options
author | E.Z. Hart <hartez@users.noreply.github.com> | 2016-09-21 16:04:36 -0600 |
---|---|---|
committer | Rui Marinho <me@ruimarinho.net> | 2016-09-21 23:04:36 +0100 |
commit | 74cb5c4a97dcb123eb471f6b1dffa1267d0305aa (patch) | |
tree | d463831cc17cba1ddfb4ba977cdc6054597ed61a /Xamarin.Forms.Platform.WP8/VisualElementTracker.cs | |
parent | d4efe0a37ea87967e38a7d0325df8d84e1c125fc (diff) | |
download | xamarin-forms-74cb5c4a97dcb123eb471f6b1dffa1267d0305aa.tar.gz xamarin-forms-74cb5c4a97dcb123eb471f6b1dffa1267d0305aa.tar.bz2 xamarin-forms-74cb5c4a97dcb123eb471f6b1dffa1267d0305aa.zip |
Implement dispose pattern correctly to support derived classes (#364)
Diffstat (limited to 'Xamarin.Forms.Platform.WP8/VisualElementTracker.cs')
-rw-r--r-- | Xamarin.Forms.Platform.WP8/VisualElementTracker.cs | 44 |
1 files changed, 29 insertions, 15 deletions
diff --git a/Xamarin.Forms.Platform.WP8/VisualElementTracker.cs b/Xamarin.Forms.Platform.WP8/VisualElementTracker.cs index 21633806..45b51a95 100644 --- a/Xamarin.Forms.Platform.WP8/VisualElementTracker.cs +++ b/Xamarin.Forms.Platform.WP8/VisualElementTracker.cs @@ -13,7 +13,15 @@ namespace Xamarin.Forms.Platform.WinPhone { public abstract FrameworkElement Child { get; set; } - public abstract void Dispose(); + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + } public event EventHandler Updated; @@ -106,29 +114,35 @@ namespace Xamarin.Forms.Platform.WinPhone } } - public override void Dispose() + protected override void Dispose(bool disposing) { if (_disposed) return; + _disposed = true; - if (_element != null) + if (disposing) { - _element.Tap -= ElementOnTap; - _element.DoubleTap -= ElementOnDoubleTap; - _element.ManipulationDelta -= OnManipulationDelta; - _element.ManipulationCompleted -= OnManipulationCompleted; - } + if (_element != null) + { + _element.Tap -= ElementOnTap; + _element.DoubleTap -= ElementOnDoubleTap; + _element.ManipulationDelta -= OnManipulationDelta; + _element.ManipulationCompleted -= OnManipulationCompleted; + } - if (_model != null) - { - _model.BatchCommitted -= HandleRedrawNeeded; - _model.PropertyChanged -= HandlePropertyChanged; + if (_model != null) + { + _model.BatchCommitted -= HandleRedrawNeeded; + _model.PropertyChanged -= HandlePropertyChanged; + } + + Child = null; + Model = null; + Element = null; } - Child = null; - Model = null; - Element = null; + base.Dispose(disposing); } protected virtual void HandlePropertyChanged(object sender, PropertyChangedEventArgs e) |