Skip to content

Commit e53dac6

Browse files
committed
Add NavigationParameterExtension and NavigateToCommand for JsonNavigationService/NavigationServiceEx
1 parent b6d9197 commit e53dac6

11 files changed

Lines changed: 99 additions & 17 deletions

File tree

VSIX/DevWinUI_Template/DevWinUI_Template/Common/PredefinedCodes.cs

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ public static class PredefinedCodes
5151
Header="Your Header"
5252
HeaderIcon="{dev:BitmapIcon Source=Assets/Fluent/AppIcon.png}"
5353
IsClickEnabled="True"
54-
dev:NavigationHelperEx.NavigateToSetting="views:MySettingPage" /> -->
54+
Command="{x:Bind local:App.Current.NavService.NavigateToCommand}"
55+
CommandParameter="{dev:NavigationParameter PageType=views:MySettingPage, BreadCrumbHeader='My Setting'}" /> -->
5556
""";
5657

5758
public static readonly string SettingsCardMVVMCommentCode =
@@ -60,23 +61,26 @@ public static class PredefinedCodes
6061
Header="Your Header"
6162
HeaderIcon="{dev:BitmapIcon Source=Assets/Fluent/AppIcon.png}"
6263
IsClickEnabled="True"
63-
dev:NavigationHelperEx.NavigateToSetting="views:MySettingPage" /> -->
64+
Command="{x:Bind local:App.Current.NavService.NavigateToCommand}"
65+
CommandParameter="{dev:NavigationParameter PageType=views:MySettingPage, BreadCrumbHeader='My Setting'}" /> -->
6466
""";
6567
public static readonly string AboutSettingCode =
6668
"""
6769
<dev:SettingsCard Description="About $safeprojectname$ and Developer"
6870
Header="About us"
6971
HeaderIcon="{dev:BitmapIcon Source=Assets/Fluent/Info.png}"
7072
IsClickEnabled="True"
71-
dev:NavigationHelperEx.NavigateToSetting="views:AboutUsSettingPage" />
73+
Command="{x:Bind local:App.Current.NavService.NavigateToCommand}"
74+
CommandParameter="{dev:NavigationParameter PageType=views:AboutUsSettingPage, BreadCrumbHeader='About us'}" />
7275
""";
7376
public static readonly string AboutSettingMVVMCode =
7477
"""
7578
<dev:SettingsCard Description="About $safeprojectname$ and Developer"
7679
Header="About us"
7780
HeaderIcon="{dev:BitmapIcon Source=Assets/Fluent/Info.png}"
7881
IsClickEnabled="True"
79-
dev:NavigationHelperEx.NavigateToSetting="views:AboutUsSettingPage" />
82+
Command="{x:Bind local:App.Current.NavService.NavigateToCommand}"
83+
CommandParameter="{dev:NavigationParameter PageType=views:AboutUsSettingPage, BreadCrumbHeader='About us'}" />
8084
""";
8185

8286
public static readonly string AppUpdateSettingCode =
@@ -85,7 +89,8 @@ public static class PredefinedCodes
8589
Header="Update App"
8690
HeaderIcon="{dev:BitmapIcon Source=Assets/Fluent/Update.png}"
8791
IsClickEnabled="True"
88-
dev:NavigationHelperEx.NavigateToSetting="views:AppUpdateSettingPage" />
92+
Command="{x:Bind local:App.Current.NavService.NavigateToCommand}"
93+
CommandParameter="{dev:NavigationParameter PageType=views:AppUpdateSettingPage, BreadCrumbHeader='Update App'}" />
8994
""";
9095

9196
public static readonly string AppUpdateSettingMVVMCode =
@@ -94,7 +99,8 @@ public static class PredefinedCodes
9499
Header="Update App"
95100
HeaderIcon="{dev:BitmapIcon Source=Assets/Fluent/Update.png}"
96101
IsClickEnabled="True"
97-
dev:NavigationHelperEx.NavigateToSetting="views:AppUpdateSettingPage" />
102+
Command="{x:Bind local:App.Current.NavService.NavigateToCommand}"
103+
CommandParameter="{dev:NavigationParameter PageType=views:AppUpdateSettingPage, BreadCrumbHeader='Update App'}" />
98104
""";
99105

100106
public static readonly string GeneralSettingCode =
@@ -103,7 +109,8 @@ public static class PredefinedCodes
103109
Header="General"
104110
HeaderIcon="{dev:BitmapIcon Source=Assets/Fluent/General.png}"
105111
IsClickEnabled="True"
106-
dev:NavigationHelperEx.NavigateToSetting="views:GeneralSettingPage" />
112+
Command="{x:Bind local:App.Current.NavService.NavigateToCommand}"
113+
CommandParameter="{dev:NavigationParameter PageType=views:GeneralSettingPage, BreadCrumbHeader='General'}" />
107114
""";
108115

109116
public static readonly string GeneralSettingMVVMCode =
@@ -112,7 +119,8 @@ public static class PredefinedCodes
112119
Header="General"
113120
HeaderIcon="{dev:BitmapIcon Source=Assets/Fluent/General.png}"
114121
IsClickEnabled="True"
115-
dev:NavigationHelperEx.NavigateToSetting="views:GeneralSettingPage" />
122+
Command="{x:Bind local:App.Current.NavService.NavigateToCommand}"
123+
CommandParameter="{dev:NavigationParameter PageType=views:GeneralSettingPage, BreadCrumbHeader='General'}" />
116124
""";
117125

118126
public static readonly string ThemeSettingCode =
@@ -121,7 +129,8 @@ public static class PredefinedCodes
121129
Header="Appearance &amp; behavior"
122130
HeaderIcon="{dev:BitmapIcon Source=Assets/Fluent/Theme.png}"
123131
IsClickEnabled="True"
124-
dev:NavigationHelperEx.NavigateToSetting="views:ThemeSettingPage" />
132+
Command="{x:Bind local:App.Current.NavService.NavigateToCommand}"
133+
CommandParameter="{dev:NavigationParameter PageType=views:ThemeSettingPage, BreadCrumbHeader='Appearance &amp; behavior'}" />
125134
""";
126135

127136
public static readonly string ThemeSettingMVVMCode =
@@ -130,7 +139,8 @@ public static class PredefinedCodes
130139
Header="Appearance &amp; behavior"
131140
HeaderIcon="{dev:BitmapIcon Source=Assets/Fluent/Theme.png}"
132141
IsClickEnabled="True"
133-
dev:NavigationHelperEx.NavigateToSetting="views:ThemeSettingPage" />
142+
Command="{x:Bind local:App.Current.NavService.NavigateToCommand}"
143+
CommandParameter="{dev:NavigationParameter PageType=views:ThemeSettingPage, BreadCrumbHeader='Appearance &amp; behavior'}" />
134144
""";
135145

136146
public static readonly string StartupAppSettingCode =

VSIX/DevWinUI_Template/WinUIApp-MVVM-NavigationView/Views/SettingsPage.xaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
VerticalScrollBarVisibility="Auto">
1616
<StackPanel Margin="10"
1717
dev:PanelAttach.ChildrenTransitions="Default"
18-
dev:SettingsNavigationAttach.JsonNavigationService="{x:Bind local:App.Current.NavService}"
1918
Spacing="5">
2019
$SettingsCards$
2120
</StackPanel>

VSIX/DevWinUI_Template/WinUIApp-NavigationView/Views/SettingsPage.xaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
VerticalScrollBarVisibility="Auto">
1616
<StackPanel Margin="10"
1717
dev:PanelAttach.ChildrenTransitions="Default"
18-
dev:SettingsNavigationAttach.JsonNavigationService="{x:Bind local:App.Current.NavService}"
1918
Spacing="5">
2019
$SettingsCards$
2120
</StackPanel>

dev/DevWinUI.Gallery/Views/SettingsPage.xaml

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,31 @@
1515
VerticalScrollBarVisibility="Auto">
1616
<StackPanel Margin="10"
1717
dev:PanelAttach.ChildrenTransitions="Default"
18-
dev:SettingsNavigationAttach.JsonNavigationService="{x:Bind local:App.Current.NavService}"
1918
Spacing="5">
20-
<dev:SettingsCard dev:NavigationHelperEx.NavigateToSetting="views:GeneralSettingPage"
19+
<dev:SettingsCard Command="{x:Bind local:App.Current.NavService.NavigateToCommand}"
20+
CommandParameter="{dev:NavigationParameter PageType=views:GeneralSettingPage,
21+
BreadCrumbHeader='General'}"
2122
Description="Change your app Settings"
2223
Header="General"
2324
HeaderIcon="{dev:BitmapIcon Source=Assets/Fluent/Settings.png}"
2425
IsClickEnabled="True" />
25-
<dev:SettingsCard dev:NavigationHelperEx.NavigateToSetting="views:ThemeSettingPage"
26+
<dev:SettingsCard Command="{x:Bind local:App.Current.NavService.NavigateToCommand}"
27+
CommandParameter="{dev:NavigationParameter PageType=views:ThemeSettingPage,
28+
BreadCrumbHeader='Appearance &amp; behavior'}"
2629
Description="Explore the different ways to customize the appearance and behavior of your app. You can change the material, theme, accent, and more options to suit your style and preference."
2730
Header="Appearance &amp; behavior"
2831
HeaderIcon="{dev:BitmapIcon Source=Assets/Fluent/Theme.png}"
2932
IsClickEnabled="True" />
30-
<dev:SettingsCard dev:NavigationHelperEx.NavigateToSetting="views:AppUpdateSettingPage"
33+
<dev:SettingsCard Command="{x:Bind local:App.Current.NavService.NavigateToCommand}"
34+
CommandParameter="{dev:NavigationParameter PageType=views:AppUpdateSettingPage,
35+
BreadCrumbHeader='Update App'}"
3136
Description="Check for Updates"
3237
Header="Update App"
3338
HeaderIcon="{dev:BitmapIcon Source=Assets/Fluent/update.png}"
3439
IsClickEnabled="True" />
35-
<dev:SettingsCard dev:NavigationHelperEx.NavigateToSetting="views:AboutUsSettingPage"
40+
<dev:SettingsCard Command="{x:Bind local:App.Current.NavService.NavigateToCommand}"
41+
CommandParameter="{dev:NavigationParameter PageType=views:AboutUsSettingPage,
42+
BreadCrumbHeader='About us'}"
3643
Description="About WucGalleryApp and Developer"
3744
Header="About us"
3845
HeaderIcon="{dev:BitmapIcon Source=Assets/Fluent/Info.png}"
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
namespace DevWinUI;
2+
public partial class NavigationParameterExtension : MarkupExtension
3+
{
4+
public NavigationTransitionInfo NavigationTransitionInfo { get; set; } = new SlideNavigationTransitionInfo { Effect = SlideNavigationTransitionEffect.FromRight };
5+
public Type PageType { get; set; }
6+
public string BreadCrumbHeader { get; set; }
7+
8+
public NavigationParameterExtension() { }
9+
10+
public NavigationParameterExtension(Type pageType)
11+
{
12+
PageType = pageType;
13+
}
14+
public NavigationParameterExtension(Type pageType, NavigationTransitionInfo navigationTransitionInfo)
15+
{
16+
PageType = pageType;
17+
NavigationTransitionInfo = navigationTransitionInfo;
18+
}
19+
public NavigationParameterExtension(Type pageType, string header)
20+
{
21+
PageType = pageType;
22+
BreadCrumbHeader = header;
23+
}
24+
public NavigationParameterExtension(Type pageType, NavigationTransitionInfo navigationTransitionInfo, string header)
25+
{
26+
PageType = pageType;
27+
BreadCrumbHeader = header;
28+
NavigationTransitionInfo = navigationTransitionInfo;
29+
}
30+
31+
protected override object ProvideValue()
32+
{
33+
return new NavigationParameterExtension(PageType, NavigationTransitionInfo, BreadCrumbHeader);
34+
}
35+
}

dev/DevWinUI/Services/NavigationService/Contracts/IJsonNavigationService.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,6 @@ public interface IJsonNavigationService
3838
JsonNavigationService ConfigureBreadcrumbBar(BreadcrumbNavigator breadcrumbBar, Dictionary<Type, BreadcrumbPageConfig> pageDictionary, NavigationTransitionInfo navigationTransitionInfo);
3939
JsonNavigationService ConfigureBreadcrumbBar(BreadcrumbNavigator breadcrumbBar, Dictionary<Type, BreadcrumbPageConfig> pageDictionary, BreadcrumbNavigatorHeaderVisibilityOptions headerVisibilityOptions, NavigationTransitionInfo navigationTransitionInfo);
4040
JsonNavigationService ConfigureTitleBar(TitleBar titleBar);
41+
42+
IDelegateCommand NavigateToCommand { get; }
4143
}

dev/DevWinUI/Services/NavigationService/Contracts/INavigationServiceEx.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,5 @@ public interface INavigationServiceEx
2121
NavigationServiceEx ConfigureBreadcrumbBar(BreadcrumbNavigator breadcrumbBar, Dictionary<Type, BreadcrumbPageConfig> pageDictionary, NavigationTransitionInfo navigationTransitionInfo);
2222
NavigationServiceEx ConfigureBreadcrumbBar(BreadcrumbNavigator breadcrumbBar, Dictionary<Type, BreadcrumbPageConfig> pageDictionary, BreadcrumbNavigatorHeaderVisibilityOptions headerVisibilityOptions, NavigationTransitionInfo navigationTransitionInfo);
2323
NavigationServiceEx ConfigureTitleBar(TitleBar titleBar);
24+
IDelegateCommand NavigateToCommand { get; }
2425
}

dev/DevWinUI/Services/NavigationService/Services/JsonNavigationService/JsonNavigationService.Properties.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,6 @@ public partial class JsonNavigationService
2626

2727
private bool _isTitlebarConfigured;
2828
private TitleBar _titleBar;
29+
30+
public IDelegateCommand NavigateToCommand { get; }
2931
}

dev/DevWinUI/Services/NavigationService/Services/JsonNavigationService/JsonNavigationService.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,19 @@ namespace DevWinUI;
44

55
public partial class JsonNavigationService : PageServiceEx, IJsonNavigationService
66
{
7+
public JsonNavigationService()
8+
{
9+
NavigateToCommand = DelegateCommand.Create(OnNavigateToCommand);
10+
}
11+
12+
private void OnNavigateToCommand(object? parameter)
13+
{
14+
if (parameter is NavigationParameterExtension navigationParameter)
15+
{
16+
NavigateTo(navigationParameter.PageType, navigationParameter.BreadCrumbHeader, false, navigationParameter.NavigationTransitionInfo);
17+
}
18+
}
19+
720
private void InitializeBase(NavigationView navigationView, Frame frame, Dictionary<string, Type> pages)
821
{
922
Reset();

dev/DevWinUI/Services/NavigationService/Services/NavigationServiceEx/NavigationServiceEx.Properties.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ public partial class NavigationServiceEx
2020

2121
private bool _isTitlebarConfigured;
2222
private TitleBar _titleBar;
23+
public IDelegateCommand NavigateToCommand { get; }
2324
}

0 commit comments

Comments
 (0)