Skip to content
This repository has been archived by the owner on May 1, 2024. It is now read-only.

[UWP] Fix crash PopAsync in CollectionView SelectionChanged #11160

Merged
merged 2 commits into from
Nov 23, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
using Xamarin.Forms.CustomAttributes;
using Xamarin.Forms.Internals;
using System.Collections.Generic;

#if UITEST
using Xamarin.UITest;
using NUnit.Framework;
using Xamarin.Forms.Core.UITests;
#endif

namespace Xamarin.Forms.Controls.Issues
{
#if UITEST
[Category(UITestCategories.CollectionView)]
#endif
[Preserve(AllMembers = true)]
[Issue(IssueTracker.Github, 11090,
"[Bug] UWP: PopAsync causes a crash when called from a CollectionView.SelectionChanged event",
PlatformAffected.UWP)]
public class Issue11090 : TestContentPage
{
protected override void Init()
{
Title = "Issue 11090";

var layout = new StackLayout();

var navButton = new Button
{
Text = "Navigate"
};

layout.Children.Add(navButton);

Content = layout;

navButton.Clicked += (sender, args) =>
{
Navigation.PushAsync(new Issue111090Page2());
};
}
}

[Preserve(AllMembers = true)]
public class Issue111090Page2 : ContentPage
{
public Issue111090Page2()
{
Title = "Issue 11090";

var layout = new StackLayout();

var collectionView = new CollectionView
{
SelectionMode = SelectionMode.Single,
ItemsSource = new List<string>()
{
"Item 1",
"Item 2",
"Item 3"
}
};

layout.Children.Add(collectionView);

Content = layout;

collectionView.SelectionChanged += async (sender, args) =>
{
await Navigation.PopAsync();
};
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
<SubType>Code</SubType>
</Compile>
<Compile Include="$(MSBuildThisFileDirectory)Issue10744.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Issue11090.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Issue10909.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Issue11794.xaml.cs">
<DependentUpon>Issue11794.xaml</DependentUpon>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,13 +171,17 @@ void UpdateFormsSelection()

void UpdateFormsSingleSelection()
{
var selectedItem = ListViewBase.SelectedItem is ItemTemplateContext itemPair
? itemPair.Item
var selectedItem = ListViewBase.SelectedItem is ItemTemplateContext itemPair
? itemPair.Item
: ListViewBase.SelectedItem;

ItemsView.SelectionChanged -= FormsSelectionChanged;
ItemsView.SelectedItem = selectedItem;
ItemsView.SelectionChanged += FormsSelectionChanged;

if (ItemsView != null)
jsuarezruiz marked this conversation as resolved.
Show resolved Hide resolved
{
ItemsView.SelectionChanged -= FormsSelectionChanged;
ItemsView.SelectedItem = selectedItem;

ItemsView.SelectionChanged += FormsSelectionChanged;
jsuarezruiz marked this conversation as resolved.
Show resolved Hide resolved
}
}

void UpdateFormsMultipleSelection()
Expand Down