Skip to content

Commit 8212b0e

Browse files
committed
Merge branch 'master' into dev/suess/Prism.Avalonia
2 parents 6180679 + f2b1a3b commit 8212b0e

File tree

5 files changed

+52
-21
lines changed

5 files changed

+52
-21
lines changed

Directory.Packages.props

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<Project>
22
<ItemGroup>
33
<PackageVersion Include="PolySharp" Version="1.14.1" />
4-
<PackageVersion Include="Prism.Container.Abstractions" Version="9.0.107" />
5-
<PackageVersion Include="Prism.Container.DryIoc" Version="9.0.107" />
6-
<PackageVersion Include="Prism.Container.Unity" Version="9.0.107" />
4+
<PackageVersion Include="Prism.Container.Abstractions" Version="9.0.114" />
5+
<PackageVersion Include="Prism.Container.DryIoc" Version="9.0.114" />
6+
<PackageVersion Include="Prism.Container.Unity" Version="9.0.114" />
77
<PackageVersion Include="System.ValueTuple" Version="4.5.0" />
88
<PackageVersion Include="System.Reactive" Version="6.0.1" />
99
<PackageVersion Include="Xamarin.Forms" Version="5.0.0.2401" />

PrismLibrary_Wpf.slnf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@
1515
"tests\\Wpf\\Prism.Wpf.Tests\\Prism.Wpf.Tests.csproj"
1616
]
1717
}
18-
}
18+
}

src/Maui/Prism.Maui/Navigation/Regions/Navigation/RegionNavigationContentLoader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ protected virtual IEnumerable<VisualElement> GetCandidatesFromRegion(IRegion reg
115115
{
116116
var registry = region.Container().Resolve<IRegionNavigationRegistry>();
117117
var registration = registry.Registrations.FirstOrDefault(x => x.Type == ViewType.Region && (x.Name == candidateNavigationContract || x.View.Name == candidateNavigationContract || x.View.FullName == candidateNavigationContract));
118-
if (registration is null)
118+
if (registration is not null)
119119
{
120120
RegionNavigationContentLoader.GetCandidatesFromRegionViews(region, registration.View.FullName);
121121
}

tests/Maui/Prism.DryIoc.Maui.Tests/Fixtures/Regions/RegionFixture.cs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using Prism.DryIoc.Maui.Tests.Mocks.ViewModels;
1+
using Prism.DryIoc.Maui.Tests.Mocks.ViewModels;
22
using Prism.DryIoc.Maui.Tests.Mocks.Views;
33
using Prism.Navigation.Xaml;
44

@@ -251,4 +251,39 @@ public async Task Region_IsDestroyed_OnNavigationGoBack()
251251
var result = await navigationService.NavigateAsync("RegionPage");
252252
Assert.True(result.Success);
253253
}
254+
255+
[Fact]
256+
public void Issue3328_WhenNavigatingToUnregisteredView_ShouldFailWithKeyNotFoundException()
257+
{
258+
// Arrange
259+
var mauiApp = CreateBuilder(prism => prism.RegisterTypes(container =>
260+
{
261+
container.RegisterForNavigation<MockContentRegionPage, MockContentRegionPageViewModel>();
262+
container.RegisterForRegionNavigation<MockRegionViewA, MockRegionViewAViewModel>();
263+
}).CreateWindow(nav => nav.NavigateAsync("MockContentRegionPage"))).Build();
264+
var window = GetWindow(mauiApp);
265+
266+
Assert.IsType<MockContentRegionPage>(window.Page);
267+
var page = window.Page as MockContentRegionPage;
268+
Assert.NotNull(page.ContentRegion.Content);
269+
Assert.IsType<MockRegionViewA>(page.ContentRegion.Content);
270+
Assert.IsType<MockRegionViewAViewModel>(page.ContentRegion.Content.BindingContext);
271+
272+
// Act
273+
var regionManager = mauiApp.Services.GetRequiredService<IRegionManager>();
274+
INavigationResult result = null;
275+
276+
regionManager.RequestNavigate("ContentRegion", "UnregisteredRegion", navResult =>
277+
{
278+
result = navResult;
279+
});
280+
281+
// Assert
282+
Assert.False(result.Success);
283+
var ex = Assert.IsType<KeyNotFoundException>(result.Exception);
284+
Assert.Equal("No view with the name 'UnregisteredRegion' has been registered", ex.Message);
285+
286+
Assert.IsType<MockRegionViewA>(page.ContentRegion.Content);
287+
Assert.IsType<MockRegionViewAViewModel>(page.ContentRegion.Content.BindingContext);
288+
}
254289
}

tests/Wpf/Prism.Wpf.Tests/Regions/Behaviors/DelayedRegionCreationBehaviorFixture.cs

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
using System;
2-
using System.Linq;
3-
using System.Threading.Tasks;
4-
using System.Windows;
51
using Prism.Navigation.Regions;
62
using Prism.Navigation.Regions.Behaviors;
73
using Prism.Wpf.Tests.Mocks;
@@ -42,8 +38,8 @@ public void RegionWillNotGetCreatedTwiceWhenThereAreMoreRegions()
4238
var adapter = new MockRegionAdapter();
4339
adapter.Accessor = accessor;
4440

45-
var behavior1 = this.GetBehavior(control1, accessor, adapter);
46-
var behavior2 = this.GetBehavior(control2, accessor, adapter);
41+
var behavior1 = GetBehavior(control1, accessor, adapter);
42+
var behavior2 = GetBehavior(control2, accessor, adapter);
4743

4844
behavior1.Attach();
4945
behavior2.Attach();
@@ -68,9 +64,9 @@ public void RegionGetsCreatedWhenAccessingRegions()
6864
GetRegionName = d => "myRegionName"
6965
};
7066

71-
var behavior1 = this.GetBehavior(control1, accessor);
67+
var behavior1 = GetBehavior(control1, accessor);
7268
behavior1.Attach();
73-
var behavior2 = this.GetBehavior(control2, accessor);
69+
var behavior2 = GetBehavior(control2, accessor);
7470
behavior2.Attach();
7571

7672
accessor.UpdateRegions();
@@ -91,7 +87,7 @@ public void RegionDoesNotGetCreatedTwiceWhenUpdatingRegions()
9187
GetRegionName = d => "myRegionName"
9288
};
9389

94-
var behavior = this.GetBehavior(control, accessor);
90+
var behavior = GetBehavior(control, accessor);
9591
behavior.Attach();
9692
accessor.UpdateRegions();
9793
IRegion region = RegionManager.GetObservableRegion(control).Value;
@@ -112,7 +108,7 @@ public async Task BehaviorDoesNotPreventControlFromBeingGarbageCollected()
112108
GetRegionName = d => "myRegionName"
113109
};
114110

115-
var behavior = this.GetBehavior(control, accessor);
111+
var behavior = GetBehavior(control, accessor);
116112
behavior.Attach();
117113

118114
Assert.True(controlWeakReference.IsAlive);
@@ -136,7 +132,7 @@ public async Task BehaviorDoesNotPreventControlFromBeingGarbageCollectedWhenRegi
136132
GetRegionName = d => "myRegionName"
137133
};
138134

139-
var behavior = this.GetBehavior(control, accessor);
135+
var behavior = GetBehavior(control, accessor);
140136
behavior.Attach();
141137
accessor.UpdateRegions();
142138

@@ -159,7 +155,7 @@ public void BehaviorShouldUnhookEventWhenDetaching()
159155
{
160156
GetRegionName = d => "myRegionName",
161157
};
162-
var behavior = this.GetBehavior(control, accessor);
158+
var behavior = GetBehavior(control, accessor);
163159
behavior.Attach();
164160

165161
int startingCount = accessor.GetSubscribersCount();
@@ -169,7 +165,7 @@ public void BehaviorShouldUnhookEventWhenDetaching()
169165
Assert.Equal<int>(startingCount - 1, accessor.GetSubscribersCount());
170166
}
171167

172-
[StaFact]
168+
[StaFact()]
173169
public void ShouldCleanupBehaviorOnceRegionIsCreated()
174170
{
175171
var control = new MockFrameworkElement();
@@ -180,7 +176,7 @@ public void ShouldCleanupBehaviorOnceRegionIsCreated()
180176
GetRegionName = d => "myRegionName"
181177
};
182178

183-
var behavior = this.GetBehavior(control, accessor);
179+
var behavior = GetBehavior(control, accessor);
184180
WeakReference behaviorWeakReference = new WeakReference(behavior);
185181
behavior.Attach();
186182
accessor.UpdateRegions();
@@ -192,7 +188,7 @@ public void ShouldCleanupBehaviorOnceRegionIsCreated()
192188

193189
Assert.False(behaviorWeakReference.IsAlive);
194190

195-
var behavior2 = this.GetBehavior(control2, accessor);
191+
var behavior2 = GetBehavior(control2, accessor);
196192
WeakReference behaviorWeakReference2 = new WeakReference(behavior2);
197193
behavior2.Attach();
198194
accessor.UpdateRegions();

0 commit comments

Comments
 (0)