From 8329323e1932f8a5e27a3b6654415a62b87718fb Mon Sep 17 00:00:00 2001 From: Max Feingold Date: Thu, 4 May 2023 15:27:22 -0600 Subject: [PATCH] PopupRenderer: check for isDisposed in OnElementPropertyChanged before taking action. Fixes https://github.com/xamarin/XamarinCommunityToolkit/issues/1947 --- .../Popup/Android/PopupRenderer.android.cs | 2 +- .../Views/Popup/UWP/PopupRenderer.uwp.cs | 13 ++++++---- .../Views/Popup/iOS/PopupRenderer.ios.cs | 25 +++++++++++-------- 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Popup/Android/PopupRenderer.android.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Popup/Android/PopupRenderer.android.cs index 2661b11e9..44286c5f3 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Popup/Android/PopupRenderer.android.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Popup/Android/PopupRenderer.android.cs @@ -93,7 +93,7 @@ public override void Show() protected virtual void OnElementPropertyChanged(object? sender, PropertyChangedEventArgs args) { - if (Element is BasePopup basePopup) + if (Element is BasePopup basePopup && !isDisposed) { if (args.PropertyName == BasePopup.VerticalOptionsProperty.PropertyName || args.PropertyName == BasePopup.HorizontalOptionsProperty.PropertyName diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Popup/UWP/PopupRenderer.uwp.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Popup/UWP/PopupRenderer.uwp.cs index 6b31c52ec..d87a8b9e5 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Popup/UWP/PopupRenderer.uwp.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Popup/UWP/PopupRenderer.uwp.cs @@ -87,12 +87,15 @@ protected virtual void OnElementChanged(ElementChangedEventArgs e) protected virtual void OnElementPropertyChanged(object? sender, PropertyChangedEventArgs args) { - if (args.PropertyName == BasePopup.VerticalOptionsProperty.PropertyName || - args.PropertyName == BasePopup.HorizontalOptionsProperty.PropertyName || - args.PropertyName == BasePopup.SizeProperty.PropertyName || - args.PropertyName == BasePopup.ColorProperty.PropertyName) + if (Element is BasePopup basePopup && !isDisposed) { - ConfigureControl(); + if (args.PropertyName == BasePopup.VerticalOptionsProperty.PropertyName || + args.PropertyName == BasePopup.HorizontalOptionsProperty.PropertyName || + args.PropertyName == BasePopup.SizeProperty.PropertyName || + args.PropertyName == BasePopup.ColorProperty.PropertyName) + { + ConfigureControl(); + } } ElementPropertyChanged?.Invoke(this, args); diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Popup/iOS/PopupRenderer.ios.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Popup/iOS/PopupRenderer.ios.cs index ed3deefdc..e704fe3ab 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Popup/iOS/PopupRenderer.ios.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Popup/iOS/PopupRenderer.ios.cs @@ -108,18 +108,21 @@ protected virtual void OnElementChanged(ElementChangedEventArgs e) protected virtual void OnElementPropertyChanged(object? sender, PropertyChangedEventArgs args) { - if (args.PropertyName == BasePopup.VerticalOptionsProperty.PropertyName || - args.PropertyName == BasePopup.HorizontalOptionsProperty.PropertyName) + if (Element is BasePopup basePopup && !isDisposed) { - SetLayout(); - } - else if (args.PropertyName == BasePopup.SizeProperty.PropertyName) - { - SetSize(); - } - else if (args.PropertyName == BasePopup.ColorProperty.PropertyName) - { - SetBackgroundColor(); + if (args.PropertyName == BasePopup.VerticalOptionsProperty.PropertyName || + args.PropertyName == BasePopup.HorizontalOptionsProperty.PropertyName) + { + SetLayout(); + } + else if (args.PropertyName == BasePopup.SizeProperty.PropertyName) + { + SetSize(); + } + else if (args.PropertyName == BasePopup.ColorProperty.PropertyName) + { + SetBackgroundColor(); + } } ElementPropertyChanged?.Invoke(this, args);