diff --git a/src/Compatibility/Core/src/Tizen/HandlerToRendererShim.cs b/src/Compatibility/Core/src/Tizen/HandlerToRendererShim.cs index 5eaaf21063f5..8c5ea7dacc0e 100644 --- a/src/Compatibility/Core/src/Tizen/HandlerToRendererShim.cs +++ b/src/Compatibility/Core/src/Tizen/HandlerToRendererShim.cs @@ -11,6 +11,8 @@ namespace Microsoft.Maui.Controls.Compatibility.Platform.Tizen { public class HandlerToRendererShim : IVisualElementRenderer { + bool _disposed; + public HandlerToRendererShim(INativeViewHandler vh) { ViewHandler = vh; @@ -22,13 +24,17 @@ public HandlerToRendererShim(INativeViewHandler vh) public EvasObject NativeView => ViewHandler.ContainerView ?? ViewHandler.NativeView; - public event EventHandler ElementChanged; public event EventHandler ElementPropertyChanged; public void Dispose() { - ViewHandler.Dispose(); + if (!_disposed) + { + _disposed = true; + Platform.SetRenderer(Element, null); + ViewHandler.Dispose(); + } } public void SetElement(VisualElement element) @@ -63,8 +69,8 @@ public void SetElement(VisualElement element) ViewHandler.SetParent(new MockParentHandler(element.RealParent as VisualElement)); } + NativeView.Deleted += OnNativeDeleted; ElementChanged?.Invoke(this, new VisualElementChangedEventArgs(oldElement, Element)); - } void OnBatchCommitted(object sender, EventArg e) @@ -77,6 +83,11 @@ void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) ElementPropertyChanged?.Invoke(this, new PropertyChangedEventArgs(e.PropertyName)); } + void OnNativeDeleted(object sender, EventArgs e) + { + Dispose(); + } + public SizeRequest GetDesiredSize(double widthConstraint, double heightConstraint) { return ViewHandler.GetDesiredSize(widthConstraint, heightConstraint);