From 8266527470b23c722553508c321090c4079202f2 Mon Sep 17 00:00:00 2001 From: James Montemagno Date: Sat, 20 Feb 2021 15:28:19 -0800 Subject: [PATCH] Don't thrown when tap/selected is null, return null. For deselect. --- .../Converters/ItemSelectedEventArgsConverter_Tests.cs | 5 +++-- .../Converters/ItemTappedEventArgsConverter_Tests.cs | 5 +++-- .../Converters/ItemSelectedEventArgsConverter.shared.cs | 7 ++++++- .../Converters/ItemTappedEventArgsConverter.shared.cs | 7 ++++++- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit.UnitTests/Converters/ItemSelectedEventArgsConverter_Tests.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit.UnitTests/Converters/ItemSelectedEventArgsConverter_Tests.cs index e0b7261a2..c2e5d9cde 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit.UnitTests/Converters/ItemSelectedEventArgsConverter_Tests.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit.UnitTests/Converters/ItemSelectedEventArgsConverter_Tests.cs @@ -15,9 +15,10 @@ public class ItemSelectedEventArgsConverter_Tests { // We know it's deprecated, still good to test it #pragma warning disable CS0618 // Type or member is obsolete - new object[] { new SelectedItemChangedEventArgs(expectedValue), expectedValue}, + new object[] { new SelectedItemChangedEventArgs(expectedValue), expectedValue }, + new object[] { null, null }, #pragma warning restore CS0618 // Type or member is obsolete - }; + }; [Theory] [MemberData(nameof(GetData))] diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit.UnitTests/Converters/ItemTappedEventArgsConverter_Tests.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit.UnitTests/Converters/ItemTappedEventArgsConverter_Tests.cs index 73c3cb9c1..2d825deff 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit.UnitTests/Converters/ItemTappedEventArgsConverter_Tests.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit.UnitTests/Converters/ItemTappedEventArgsConverter_Tests.cs @@ -15,9 +15,10 @@ public class ItemTappedEventArgsConverter_Tests { // We know it's deprecated, still good to test it #pragma warning disable CS0618 // Type or member is obsolete - new object[] { new ItemTappedEventArgs(null, expectedValue), expectedValue}, + new object[] { new ItemTappedEventArgs(null, expectedValue), expectedValue }, + new object[] { new ItemTappedEventArgs(null, null), null }, #pragma warning restore CS0618 // Type or member is obsolete - }; + }; [Theory] [MemberData(nameof(GetData))] diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Converters/ItemSelectedEventArgsConverter.shared.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Converters/ItemSelectedEventArgsConverter.shared.cs index 8559d8c86..f1a48906b 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Converters/ItemSelectedEventArgsConverter.shared.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Converters/ItemSelectedEventArgsConverter.shared.cs @@ -19,9 +19,14 @@ public class ItemSelectedEventArgsConverter : ValueConverterExtension, IValueCon /// The culture to use in the converter. This is not implemented. /// A object from object of type . public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - => value is SelectedItemChangedEventArgs selectedItemChangedEventArgs + { + if (value == null) + return null; + + return value is SelectedItemChangedEventArgs selectedItemChangedEventArgs ? selectedItemChangedEventArgs.SelectedItem : throw new ArgumentException("Expected value to be of type SelectedItemChangedEventArgs", nameof(value)); + } /// /// This method is not implemented and will throw a . diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Converters/ItemTappedEventArgsConverter.shared.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Converters/ItemTappedEventArgsConverter.shared.cs index 0f8d240db..83bd96497 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Converters/ItemTappedEventArgsConverter.shared.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Converters/ItemTappedEventArgsConverter.shared.cs @@ -19,9 +19,14 @@ public class ItemTappedEventArgsConverter : ValueConverterExtension, IValueConve /// The culture to use in the converter. This is not implemented. /// A object from object of type . public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - => value is ItemTappedEventArgs itemTappedEventArgs + { + if (value == null) + return null; + + return value is ItemTappedEventArgs itemTappedEventArgs ? itemTappedEventArgs.Item : throw new ArgumentException("Expected value to be of type ItemTappedEventArgs", nameof(value)); + } /// /// This method is not implemented and will throw a .