diff --git a/.github/workflows/build-deploy-docs.yml b/.github/workflows/build-deploy-docs.yml
index 0d8f10d..972ea4f 100644
--- a/.github/workflows/build-deploy-docs.yml
+++ b/.github/workflows/build-deploy-docs.yml
@@ -8,12 +8,6 @@ on:
- 'src/**'
- 'README.md'
- '.github/workflows/build-deploy-docs.yml'
- pull_request:
- branches: [ master ]
- paths:
- - 'docs/**'
- - 'src/**'
- - 'README.md'
workflow_dispatch:
permissions:
diff --git a/src/.vscode/launch.json b/.vscode/launch.json
similarity index 61%
rename from src/.vscode/launch.json
rename to .vscode/launch.json
index 6efab40..209ee0f 100644
--- a/src/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -11,11 +11,11 @@
"name": "Uno Platform Desktop Debug (MvuxGallery)",
"type": "coreclr",
"request": "launch",
- "preLaunchTask": "build-desktop",
+ "preLaunchTask": "build-desktop-MvuxGallery",
// If you have changed target frameworks, make sure to update the program path.
"program": "${workspaceFolder}/DevTKSS.Uno.SampleApps.MvuxGallery/bin/Debug/net9.0-desktop/DevTKSS.Uno.SampleApps.MvuxGallery.dll",
"args": [],
- "launchSettingsProfile": "DevTKSS.Uno.SampleApps.MvuxGallery (Desktop)",
+ "launchSettingsProfile": "DevTKSS MvuxGallery (Desktop)",
"env": {
"DOTNET_MODIFIABLE_ASSEMBLIES": "debug"
},
@@ -25,24 +25,38 @@
"stopAtEntry": false
},
{
- // Use IntelliSense to find out which attributes exist for C# debugging
- // Use hover for the description of the existing attributes
- // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/main/debugger-launchjson.md
"name": "Uno Platform Desktop Debug (XamlNavigationApp)",
"type": "coreclr",
"request": "launch",
- "preLaunchTask": "build-desktop",
+ "preLaunchTask": "build-desktop-XamlNavigationApp",
// If you have changed target frameworks, make sure to update the program path.
- "program": "${workspaceFolder}/DevTKSS.Uno.XamlNavigationApp-1/bin/Debug/net9.0-desktop/DevTKSS.Uno.XamlNavigationApp.dll",
+ "program": "${workspaceFolder}/DevTKSS.Uno.XamlNavigationApp/bin/Debug/net9.0-desktop/DevTKSS.Uno.XamlNavigationApp.dll",
"args": [],
"launchSettingsProfile": "DevTKSS.Uno.XamlNavigationApp (Desktop)",
"env": {
"DOTNET_MODIFIABLE_ASSEMBLIES": "debug"
},
- "cwd": "${workspaceFolder}/DevTKSS.Uno.XamlNavigationApp-1",
+ "cwd": "${workspaceFolder}/DevTKSS.Uno.XamlNavigationApp",
// For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console
"console": "internalConsole",
"stopAtEntry": false
},
+ {
+ "name": "Uno Platform Desktop Debug (SimpleMemberSelectionApp)",
+ "type": "coreclr",
+ "request": "launch",
+ "preLaunchTask": "build-desktop-SimpleMemberSelectionApp",
+ // If you have changed target frameworks, make sure to update the program path.
+ "program": "${workspaceFolder}/DevTKSS.Uno.SimpleMemberSelectionApp-1/bin/Debug/net9.0-desktop/DevTKSS.Uno.SimpleMemberSelectionApp.dll",
+ "args": [],
+ "launchSettingsProfile": "DevTKSS.Uno.SimpleMemberSelectionApp (Desktop)",
+ "env": {
+ "DOTNET_MODIFIABLE_ASSEMBLIES": "debug"
+ },
+ "cwd": "${workspaceFolder}/DevTKSS.Uno.SimpleMemberSelectionApp",
+ // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console
+ "console": "internalConsole",
+ "stopAtEntry": false
+ }
]
}
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
index c74be28..ec33fd4 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,5 +1,21 @@
{
"files.associations": {
- "*.tmpl*": "mustache"
+ "*.tmpl*": "mustache",
+ "global.json": "jsonc"
},
+ "markdownlint.lintWorkspaceGlobs": [
+ "**/*.{md,mkd,mdwn,mdown,markdown,markdn,mdtxt,mdtext,workbook}",
+ "!**/*.code-search",
+ "!**/bower_components",
+ "!**/node_modules",
+ "!**/.git",
+ "!**/vendor",
+ "!**/copilot-instructions.md"
+ ],
+ "explorer.fileNesting.enabled": true,
+ "explorer.fileNesting.expand": false,
+ "explorer.fileNesting.patterns": {
+ "*.xaml": "$(capture).xaml.cs"
+ },
+ "dotnet.defaultSolution": "DevTKSS.Uno.SampleApps.slnx"
}
\ No newline at end of file
diff --git a/src/.vscode/tasks.json b/.vscode/tasks.json
similarity index 51%
rename from src/.vscode/tasks.json
rename to .vscode/tasks.json
index 2614aac..9230005 100644
--- a/src/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -2,7 +2,7 @@
"version": "2.0.0",
"tasks": [
{
- "label": "build-desktop MvuxGallery",
+ "label": "build-desktop-MvuxGallery",
"command": "dotnet",
"type": "process",
"args": [
@@ -15,7 +15,7 @@
"problemMatcher": "$msCompile"
},
{
- "label": "publish-desktop MvuxGallery",
+ "label": "publish-desktop-MvuxGallery",
"command": "dotnet",
"type": "process",
"args": [
@@ -28,12 +28,12 @@
"problemMatcher": "$msCompile"
},
{
- "label": "build-desktop XamlNavigationApp",
+ "label": "build-desktop-XamlNavigationApp",
"command": "dotnet",
"type": "process",
"args": [
"build",
- "${workspaceFolder}/DevTKSS.Uno.XamlNavigationApp-1/DevTKSS.Uno.XamlNavigationApp.csproj",
+ "${workspaceFolder}/DevTKSS.Uno.XamlNavigationApp/DevTKSS.Uno.XamlNavigationApp.csproj",
"/property:GenerateFullPaths=true",
"/property:TargetFramework=net9.0-desktop",
"/consoleloggerparameters:NoSummary"
@@ -41,12 +41,38 @@
"problemMatcher": "$msCompile"
},
{
- "label": "publish-desktop XamlNavigationApp",
+ "label": "publish-desktop-XamlNavigationApp",
"command": "dotnet",
"type": "process",
"args": [
"publish",
- "${workspaceFolder}/DevTKSS.Uno.XamlNavigationApp-1/DevTKSS.Uno.XamlNavigationApp.csproj",
+ "${workspaceFolder}/DevTKSS.Uno.XamlNavigationApp/DevTKSS.Uno.XamlNavigationApp.csproj",
+ "/property:GenerateFullPaths=true",
+ "/property:TargetFramework=net9.0-desktop",
+ "/consoleloggerparameters:NoSummary"
+ ],
+ "problemMatcher": "$msCompile"
+ },
+ {
+ "label": "build-desktop-SimpleMemberSelectionApp",
+ "command": "dotnet",
+ "type": "process",
+ "args": [
+ "build",
+ "${workspaceFolder}/DevTKSS.Uno.SimpleMemberSelectionApp/DevTKSS.Uno.SimpleMemberSelectionApp.csproj",
+ "/property:GenerateFullPaths=true",
+ "/property:TargetFramework=net9.0-desktop",
+ "/consoleloggerparameters:NoSummary"
+ ],
+ "problemMatcher": "$msCompile"
+ },
+ {
+ "label": "publish-desktop-SimpleMemberSelectionApp",
+ "command": "dotnet",
+ "type": "process",
+ "args": [
+ "publish",
+ "${workspaceFolder}/DevTKSS.Uno.SimpleMemberSelectionApp/DevTKSS.Uno.SimpleMemberSelectionApp.csproj",
"/property:GenerateFullPaths=true",
"/property:TargetFramework=net9.0-desktop",
"/consoleloggerparameters:NoSummary"
diff --git a/DevTKSS.Uno.SampleApps.slnx b/DevTKSS.Uno.SampleApps.slnx
new file mode 100644
index 0000000..5cea17d
--- /dev/null
+++ b/DevTKSS.Uno.SampleApps.slnx
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/README.md b/README.md
index b0aa36c..126a849 100644
--- a/README.md
+++ b/README.md
@@ -83,15 +83,24 @@ A complete tutorial application demonstrating navigation patterns with MVUX and
#### Tutorial Content
+- **[Tutorial Serie Uno.Extensions Navigation via Xaml](https://devtkss.github.io/DevTKSS.Uno.SampleApps/articles/en/Navigation/Extensions-Navigation-en.html)** - Step-by-step guide (🇩🇪 German | 🇬🇧 English) - or [watch the Video Guide 🇩🇪](https://youtu.be/knt2oOjHH30)!
+- **[Listen to Route Changes with IRouteNotifier](https://devtkss.github.io/DevTKSS.Uno.SampleApps/articles/en/Navigation/HowTo-ChangeRoutes-en.html)** - Advanced navigation handling - or [🇩🇪 German Version](https://devtkss.github.io/DevTKSS.Uno.SampleApps/articles/de/Navigation/HowTo-ChangeRoutes-de.html)
+- **[Video Tutorial Series](https://youtube.com/playlist?list=PLEL6kb4Bivm_g81iKBl-f0eYPNr5h2dFX)** - Complete walkthrough (🇩🇪 German with English subtitles)
+- **[Source Code](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/tree/master/src/DevTKSS.Uno.XamlNavigationApp/)** - Browse the implementation
+
+**Available Resources:**
+
- [Uno.Extensions.Reactive (MVUX)](https://platform.uno/docs/articles/external/uno.extensions/doc/Learn/Mvux/Overview.html)
- [Uno.Extensions.Navigation](https://platform.uno/docs/articles/external/uno.extensions/doc/Learn/Navigation/NavigationOverview.html)
- [XAML Markup Navigation](https://platform.uno/docs/articles/external/uno.extensions/doc/Learn/Navigation/HowTo-NavigateInXAML.html)
+- [IRouteNotifier](https://platform.uno/docs/articles/external/uno.extensions/doc/Learn/Navigation/Advanced/HowTo-IRouteNotifier.html)
-**Available Resources:**
+### Simple Member Selection App
-- **[Tutorial Documentation](https://devtkss.github.io/DevTKSS.Uno.SampleApps/articles/en/Navigation/Extensions-Navigation-en.html)** - Step-by-step guide (🇩🇪 German | 🇬🇧 English)
-- **[Video Tutorial Series](https://youtube.com/playlist?list=PLEL6kb4Bivm_g81iKBl-f0eYPNr5h2dFX)** - Complete walkthrough (🇩🇪 German with English subtitles)
-- **[Source Code](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/tree/master/src/DevTKSS.Uno.XamlNavigationApp-1/)** - Browse the implementation
+A basic application demonstrating selection and display of member names in a `ListView` bound to a `ListState` in the Model using MVUX.
+
+- **[Video Tutorial - How To: Binden von ListState und ImmutableList zu FeedView & ListView im UI | Uno Community Tutorial](https://youtu.be/wOsSlv1YFic)** - Step-by-step guide (🇩🇪 German)
+- **[Source Code](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/tree/master/src/DevTKSS.Uno.SimpleMemberSelectionApp/)**
---
diff --git a/docs/articles/de/Introduction-de.md b/docs/articles/de/Introduction-de.md
index 8eba71e..b6fe2f9 100644
--- a/docs/articles/de/Introduction-de.md
+++ b/docs/articles/de/Introduction-de.md
@@ -30,7 +30,7 @@ Hier ein schneller Überblick über die enthaltenen Samples. Detaillierte Infos
### XamlNavigationApp (Mvux)
- [NavigationView in MVUX oder MVVM + XAML](xref:DevTKSS.Uno.ExtensionsNavigation.Overview.de)
-- [Zum Quellcode](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.XamlNavigationApp-1/)
+- [Zum Quellcode](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.XamlNavigationApp/)
---
diff --git a/docs/articles/de/Navigation/Extensions-Navigation-de.md b/docs/articles/de/Navigation/Extensions-Navigation-de.md
index 5a56615..463a535 100644
--- a/docs/articles/de/Navigation/Extensions-Navigation-de.md
+++ b/docs/articles/de/Navigation/Extensions-Navigation-de.md
@@ -28,7 +28,13 @@ Lass uns zuerst einmal schauen, was man beispielsweise in einer Xaml-basierten U
## Voraussetzungen
-Diese Tutorial Reihe baut darauf auf, dass deine Entwicklungsumgebung bereits vollständig eingerichtet ist und der Befehl `uno-check --tfm net9.0-desktop` ausgeführt in deinem Terminal grünes Licht gibt. Hier kannst du diese auch noch einmal nachschauen:
+Diese Tutorial Reihe baut darauf auf, dass deine Entwicklungsumgebung bereits vollständig eingerichtet ist und der nachfolgende Befehl dir in deinem Terminal ausgeführt grünes Licht gibt:
+
+```bash
+uno-check --tfm net9.0-desktop`
+```
+
+Hier kannst du bei Bedarf auch noch einmal nachschauen:
- [Tutorial: Einrichten der Entwicklungsumgebung](xref:DevTKSS.Uno.Setup.DevelopmentEnvironment.de)
@@ -46,7 +52,7 @@ Wenn du diesen Schritt abgeschlossen hast, fahren wir mit der Implementierung de
---
-- [Hier geht's zum Source Code der verwendeten Beispiel Anwendung XamlNavigationApp](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.XamlNavigationApp-1)
+- [Hier geht's zum Source Code der verwendeten Beispiel Anwendung XamlNavigationApp](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.XamlNavigationApp)
### Uno Dokumentation Links
diff --git a/docs/articles/de/Navigation/HowTo-ChangeRoutes-de.md b/docs/articles/de/Navigation/HowTo-ChangeRoutes-de.md
index 4e82829..850821a 100644
--- a/docs/articles/de/Navigation/HowTo-ChangeRoutes-de.md
+++ b/docs/articles/de/Navigation/HowTo-ChangeRoutes-de.md
@@ -117,7 +117,7 @@ Solltest du das noch nicht gemacht haben, dann geht das jetzt ganz einfach auch
Nun fehlt nur noch die eigentliche Reaktion auf die Routen Änderung. Das machen wir in der Methode `OnRouteChanged`, die wir zuvor im Konstruktor registriert haben. Hier ist ein Beispiel, wie du dies implementieren kannst:
-[!code-csharp[](../../../../src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/MainModel.cs#L19-L22)]
+[!code-csharp[](../../../../src/DevTKSS.Uno.XamlNavigationApp/Presentation/MainModel.cs#L19-L22)]
**Was passiert hier?**
@@ -138,7 +138,7 @@ Glückwunsch! Du hast erfolgreich gelernt, wie du auf Routen Änderungen in dein
**Hier nochmal der komplette Code, den du in deinem Model von diesem Tutorial haben solltest:**
-[!code-csharp[](../../../../src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/MainModel.cs#L3-L25)]
+[!code-csharp[](../../../../src/DevTKSS.Uno.XamlNavigationApp/Presentation/MainModel.cs#L3-L25)]
## Links zur Uno Documentation
diff --git a/docs/articles/de/Navigation/HowTo-Defining-UI-NavigationView-de.md b/docs/articles/de/Navigation/HowTo-Defining-UI-NavigationView-de.md
index 04eaaca..ad7d180 100644
--- a/docs/articles/de/Navigation/HowTo-Defining-UI-NavigationView-de.md
+++ b/docs/articles/de/Navigation/HowTo-Defining-UI-NavigationView-de.md
@@ -6,7 +6,7 @@ uid: DevTKSS.Uno.ExtensionsNavigation.HowTo-Defining-UI.de
In diesem Teil des Tutorials, wollen wir uns anschauen, wie man eine einfache Seitennavigation mittels einer `NavigationView` erstellen kann.
-**Was zuvor geschah...**
+**Was wir zuvor gemacht haben**
Wir haben uns nun zuvor im Intro angeschaut, was wir mit der `Uno.Extensions.Navigation` und der `NavigationView` alles machen können und im anschluss das Setup der Anwendung angepasst oder diese erstellt. Nun wollen wir uns anschauen wie man dann dann auch umsetzen kann!
@@ -14,7 +14,7 @@ Wir haben uns nun zuvor im Intro angeschaut, was wir mit der `Uno.Extensions.Nav
In diesem Video werden wir uns zusammen anschauen, wie du ein `NavigationView`-Steuerelement in einer XAML-Markup-App einrichtest und verwendest. Wir werden die Navigation zwischen verschiedenen Seiten implementieren und dabei die MVUX-Prinzipien anwenden. Den Code kannst du dabei direkt aus dem Code hierunter kopieren und in deine Anwendung einfügen, wenn du möchtest, aber aus eigener Erfahrung heraus hilft es dir mehr, den Code selber zu schreiben und dabei zuzuschauen, wie es funktioniert. So kannst du auch besser verstehen, was du tust und warum.
-
+
## Implementierung der NavigationView
@@ -84,27 +84,33 @@ Nun wollen wir die von der Extension ermöglichten Eigenschaften, sogenannte `At
```diff
-
+ utu:SafeArea.Insets="VisibleBounds">
+
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
```
1. Zu guter Letzt benötigt das `Grid`, welches wir für die Navigation des Content der `NavigationView` verwenden wollen nun noch zwei letzte weitere und sehr wichtige Eigenschaften setzen, ohne welche es gut möglich ist, dass unser Vorhaben misslingt.
@@ -118,8 +124,8 @@ Nun wollen wir die von der Extension ermöglichten Eigenschaften, sogenannte `At
```diff
-
```
@@ -137,7 +143,7 @@ Nun wollen wir die von der Extension ermöglichten Eigenschaften, sogenannte `At
*Die Namensgebung ist also keineswegs Zufall!*
>[!NOTE]
- > Der "Visibility"-Navigator ist gemäß der Dokumentation verfügbare Bezeichner für diese Eigenschaft.
+ > Der "Visibility"-Navigator ist gemäß der [Uno Dokumentation der einzige verfügbare Bezeichner für diese Eigenschaft](https://platform.uno/docs/articles/external/uno.extensions/doc/Learn/Navigation/HowTo-Regions.html#properties-in-the-region-class).
## Nächste Schritte
diff --git a/docs/articles/de/Navigation/HowTo-ModelDefinition-de.md b/docs/articles/de/Navigation/HowTo-ModelDefinition-de.md
index 000c9aa..b8261de 100644
--- a/docs/articles/de/Navigation/HowTo-ModelDefinition-de.md
+++ b/docs/articles/de/Navigation/HowTo-ModelDefinition-de.md
@@ -4,23 +4,68 @@ uid: DevTKSS.Uno.ExtensionsNavigation.HowTo-DefiningModelOrViewModel.de
# Anleitung: Navigation im Model oder ViewModel
-Nun wollen wir uns einmal anschauen, wie wir passend zur Uno Extensions Navigation unser Model bzw. ViewModel aufbauen müssen.
+Nun wollen wir uns einmal anschauen, wie wir passend zur Uno Extensions Navigation unsere Verbindung zwischen der `View` und dem `ViewModel` aufbauen müssen.
-## Voraussetzungen
+Hierfür wollen wir uns natürlich ersteinmal die Frage stellen: **Navigation nur im Xaml - Geht das eigentlich?**
-1. Erstelle hierfür zu aller erst ein Model bzw. ViewModel Element.
+*Ja und Nein.*
- [!INCLUDE [Anleitung zur Erstellung eines grundlegenden Model bzw. ViewModels](../HowTo-Adding-New-VM-Class-Record-de.md)]
+Also, dann lass uns das doch mal genauer betrachten. Was bedeutet das denn nun?
-2. Füge nun noch den `INavigator` als **DependencyInjection** Konstruktor Parameter hinzu.
+- **Ja:**
- [!INCLUDE [Anleitung: Nutze Konstruktor Parameter für DependencyInjection](../HowTo-Using-DI-in-ctor-de.md)]
+ Tatsächlich brauchst du grundsätzlich weder Codebehind noch Code im ViewModel / Model für die Navigation, wenn du die `Attached Properties` in dem Xaml deiner Seite nutzt.
-## Navigation im Xaml
+ **Wie das geht, erfährst du bei Interesse direkt hier:**
-Grundsätzlich benötigst du tatsächlich nicht unbedingt einen Navigations-Code im ViewModel / Model, wenn du wie in der [Anleitung: Definieren des UI mit NavigationView für ExtensionsNavigation](xref:DevTKSS.Uno.ExtensionsNavigation.HowTo-Defining-UI.de) die `Attached Properties` nutzt!
+ [Anleitung: Definieren des UI mit NavigationView für ExtensionsNavigation](xref:DevTKSS.Uno.ExtensionsNavigation.HowTo-Defining-UI.de)
-In diesem Fall wären es klassischerweise nur dann die Title Eigenschaften oder andere, die du von View zu ViewModel bindest und du wärst fertig. Und genau das ist auch ein großer Vorteil dieser Extension meiner Meinung nach.
+ In diesem Fall wären es dann nur zum beispiel die anzuzeigende Eigenschaft, wie die `string`-Property `Title`, die du entsprechend in deiner `Page`, also deiner `View` zum `ViewModel` bzw. `Model` bindest und schon bist du fertig damit!
+
+ > [!TIP]
+ > Mit der Attached Property `uen:Navi` kannst du den Titel der Seite in der NavigationView setzen.
+
+- **Nein:**
+
+ 1. Du musst weiterhin die Routen, die du Navigieren möchtest in der `App.xaml.cs` Klasse in der `RegisterRoutes` Methode registrieren, damit der `INavigator` auch weiß, was zusammen gehört und von wo du mit welchen "Qualifizierern" welche Routen erlauben möchtest zu navigieren.
+ 2. Wenn du in deinem Model bzw. ViewModel eine Navigation auslösen möchtest, dann brauchst du den `INavigator` dort natürlich, um die Navigation zu starten.
+
+## Vorraussetzungen schaffen
+
+Gut, also lass uns doch mal davon ausgehen, dass wir genannten zweiten Fall haben und folgendes Tun wollen:
+
+1. Unser Anwender soll mit einem Klick auf einen `Button` eine Funktion in unserem `ViewModel` bzw. `Model` auslösen können
+2. Diese Funktion soll ihn zur `SecondPage` navigieren, die wir in der Uno App Vorlage inkludiert hatten, aber es könnte auch jede andere Seite sein, die du selbst erstellt und registriert hast.
+
+ Angenommen das hier ist unsere `App.xaml.cs` mit der `RegisterRoutes` Methode:
+
+ ```csharp
+ {
+ views.Register(
+ new ViewMap(ViewModel: typeof(ShellModel)),
+ new ViewMap(),
+ new DataViewMap()
+ );
+
+ routes.Register(
+ new RouteMap("", View: views.FindByViewModel(),
+ Nested:
+ [
+ new RouteMap("Main", View: views.FindByViewModel(), IsDefault:true),
+ new RouteMap("Second", View: views.FindByViewModel())
+ ]
+ )
+ );
+ }
+ ```
+
+Aber wie muss dafür unser `ViewModel` bzw. `Model` aussehen, damit wir das umsetzen können?
+
+Hierfür brauchen wir erstmal folgendes Schritte:
+
+1. [Erstelle ein Model bzw. ViewModel](xref:DevTKSS.Uno.Setup.HowTo-AddingNew-VM-Class-Record.de)
+
+2. [Und hole dir dort den `INavigator` als **`DependencyInjection` Konstruktor Parameter**](xref:DevTKSS.Uno.Setup.Using-DI-in-ctor.de)
## Binden der View UI Steuerelemente an Eigenschaften im ViewModel bzw. Model
@@ -64,6 +109,10 @@ public partial class DashboardViewModel : ObservableObject
}
```
+Mit diesem Code ist es dir möglich, die `Name` Eigenschaft in der View zu binden und den `NavigateSecondAsyncCommand` zu verwenden, um zur `SecondViewModel` zu navigieren.
+
+Hierbei kannst du einen Button oder ein anderes Steuerelement in der View verwenden, um die Navigation auszulösen, aber indem du die `IsEnabled` Eigenschaft des Steuerelements an den `CanExecute` Status des Befehls bindest, kannst du die Navigation nur dann ausführen, wenn der Name nicht leer ist.
+
### [Mvux](#tab/mvux)
```csharp
@@ -92,8 +141,11 @@ public partial record MainModel
}
```
-Mit diesem Code ist es dir möglich, die `Name` Eigenschaft in der View zu binden und den `NavigateSecondAsyncCommand` zu verwenden, um zur `SecondViewModel` zu navigieren.
+Hier könntest du dann in der View einen Button definieren, der die `NavigateSecondAsync` Methode aufruft, um zur `SecondModel` zu navigieren, sich den `Name` Wert holt und diesen als Daten an die nächste Seite übergibt.
+Wenn du jetzt einmal vergleichst, wie das in Mvvm und Mvux aussieht, wirst du feststellen, dass es im Grunde genommen sehr ähnlich ist, aber in Mvux das ganze doch irgendwie übersichtlicher und du weniger "boilerplate" Code benötigt um das selbe zu erreichen.
-Hierbei kannst du einen Button oder ein anderes Steuerelement in der View verwenden, um die Navigation auszulösen, aber indem du die `IsEnabled` Eigenschaft des Steuerelements an den `CanExecute` Status des Befehls bindest, kannst du die Navigation nur dann ausführen, wenn der Name nicht leer ist.
+Und um zum beispiel direkt an den `IState Name` eine TwoWay Bindung in der View zu erstellen, brauchst du nicht einmal eine `PropertyChanged` Benachrichtigung, wie du es in Mvvm tun müsstest, sondern hängst einfach an das `.Value(...)` ein `.ForEach(...)` daran, erstellst eine Methode, die den neuen Wert empfängt und kannst dort direkt damit arbeiten. Kein lästiges Implementieren von `INotifyPropertyChanged` mehr.
+
+Mehr zu diesem Thema findest du hier im [Tutorial: Auf Routen Änderungen reagieren](xref:DevTKSS.Uno.ExtensionsNavigation.HowTo-ChangeRoutes.de)
---
diff --git a/docs/articles/de/Navigation/HowTo-RegisterRoutes-de.md b/docs/articles/de/Navigation/HowTo-RegisterRoutes-de.md
index 5164b08..48dd1e1 100644
--- a/docs/articles/de/Navigation/HowTo-RegisterRoutes-de.md
+++ b/docs/articles/de/Navigation/HowTo-RegisterRoutes-de.md
@@ -4,7 +4,7 @@ uid: DevTKSS.Uno.ExtensionsNavigation.HowTo-RegisterRoutes.de
# Anleitung: Registrieren und Verwalten von Routen
-Mit der `Uno.Extensions.Navigation` verwenden wir eine zentrale Definition der **Routen Registrierung** in der App Klasse [`App.xaml.cs`(source link)](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.XamlNavigationApp-1/App.xaml.cs) gehandhabt, was man sich vereinfacht schlichtweg wie eine Landkarte vorstellen kann.
+Mit der `Uno.Extensions.Navigation` verwenden wir eine zentrale Definition der **Routen Registrierung** in der App Klasse [`App.xaml.cs`(source link)](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.XamlNavigationApp/App.xaml.cs) gehandhabt, was man sich vereinfacht schlichtweg wie eine Landkarte vorstellen kann.
## Voraussetzungen
@@ -22,7 +22,7 @@ Bevor du mit der Routen Registrierung beginnst, brauchst du noch zwei Dinge:
Füge die dafür benötigte Methode wie folgt in deine App Klasse unterhalb der `OnLaunched` Methode ein:
-[!code-csharp[](../../../../src/DevTKSS.Uno.XamlNavigationApp-1/App.xaml.cs#L82)]
+[!code-csharp[](../../../../src/DevTKSS.Uno.XamlNavigationApp/App.xaml.cs#L82)]
## Definieren der `ViewMap`'s
@@ -34,13 +34,16 @@ Hiermit teilen wir dem Navigator mit, welche Seite (`View`) mit welchem (`View`-
new ViewMap(ViewModel: typeof(ShellModel)),
new ViewMap(),
new DataViewMap()
+ );
+
+ ...
```
Wenn zusätzliche Daten Objekte bei der Navigation dieser Route erforderlich sind, dann konvertierst du diese als `DataViewMap` beispielsweise so wie in der letzten Zeile.
So sieht das zum Beispiel dann in der XamlNavigationApp aus, wo ich `Entity` nicht mehr benötigt habe und diese Route entsprechend zurück konvertiert habe:
-[!code-csharp[](../../../../src/DevTKSS.Uno.XamlNavigationApp-1/App.xaml.cs#L83-L89)]
+[!code-csharp[](../../../../src/DevTKSS.Uno.XamlNavigationApp/App.xaml.cs#L83-L89?highlight=L5)]
## Hierarchisch aufgebaute `RoutesMap`'s
@@ -65,9 +68,16 @@ Nun wollen wir aber auf der `MainPage` vielleicht eine TabBar, NavigationBar, ei
**Das machen wir beispielsweise so:**
-[!code-csharp[](../../../../src/DevTKSS.Uno.XamlNavigationApp-1/App.xaml.cs#L96-L101)]
+[!code-csharp[](../../../../src/DevTKSS.Uno.XamlNavigationApp/App.xaml.cs#L88-L103)]
+
+Hier siehst du, dass ich:
+
+1. Eine weitere Seite hinzugefügt habe: `DashboardPage`
+2. Ein zugehöriges Model erstellt habe: `DashboardModel`
+3. Diese in der `routes.Register` Methode registriert habe, indem ich sie als `Nested` Routen der `Main`-Route hinzugefügt habe.
+4. Und die beiden Routen `"Dashboard"` `"Second"` somit nun in der `RouteMap` der `Main`-Route verschachtelt sind.
-Hier siehst du, dass ich eine weitere Seite hinzugefügt habe, die `DashboardPage` und ein Model dazu erstellt habe namens `DashboardModel`. Außerdem habe ich die Route `Second` in die `RouteMap` der `Main`-Route verschachtelt.
+Klasse! Nun sind diese Routen also korrekt registriert und können mit dem "Nested"-Qualifizierer `-` in der NavigationView oder anderen Navigationssteuerelementen verwendet werden um sie innerhalb der `MainPage` `"Main"`-Route anzuzeigen!
## Nützliche Informationen
@@ -77,4 +87,4 @@ Wenn du anstelle von **MVVM** das **MVUX** verwendest, solltest du darauf achten
## Anwendung starten
-Nun sind wir auch schon fertig mit der Routen Registrierung und können die Anwendung starten. Wenn du nun die App startest, solltest du in der Lage sein, die `MainPage` zu sehen und von dort aus zu den anderen Seiten zu navigieren.
+Nun sind wir auch schon fertig mit der Routen Registrierung und können die Anwendung starten. Wenn du nun die App startest, solltest du in der Lage sein, die `MainPage` zu sehen und von dort aus zu den anderen Seiten zu navigieren. Diese sollten dann im `Content` Bereich der `NavigationView` angezeigt werden, wenn du alle Schritte bisher befolgt hast.
diff --git a/docs/articles/de/Navigation/toc.yml b/docs/articles/de/Navigation/toc.yml
index 628fd7d..2f75538 100644
--- a/docs/articles/de/Navigation/toc.yml
+++ b/docs/articles/de/Navigation/toc.yml
@@ -1,5 +1,5 @@
items:
- - name: Möglichkeiten für die Navigation in einer Uno App
+ - name: Möglichkeiten für die Navigation in unseren Uno Apps
uid: DevTKSS.Uno.Navigation.Navigation-Options.de
href: Navigation-Options-de.md
- name: Navigation mit Uno Extensions
@@ -7,21 +7,21 @@ items:
href: Extensions-Navigation-de.md
- name: Erstellen oder upgraden
items:
- - name: "App erstellen (Wizard/CLI)"
+ - name: "Tutorial: Neue Uno App erstellen (Wizard/CLI)"
uid: DevTKSS.Uno.Setup.HowTo-CreateNewUnoApp.de
href: ../HowTo-CreateApp-de.md
- - name: "Eine bestehende App upgraden"
+ - name: "Tutorial: Eine bestehende Uno App upgraden"
uid: DevTKSS.Uno.ExtensionsNavigation.UpgradeExistingApp.de
href: HowTo-UpgradeExistingApp-de.md
- - name: "UI mit NavigationView definieren"
+ - name: "Tutorial: UI mit NavigationView definieren"
uid: DevTKSS.Uno.ExtensionsNavigation.HowTo-Defining-UI.de
href: HowTo-Defining-UI-NavigationView-de.md
- - name: "Routen registrieren"
+ - name: "Anleitung: Registrieren und Verwalten von Routen"
uid: DevTKSS.Uno.ExtensionsNavigation.HowTo-RegisterRoutes.de
href: HowTo-RegisterRoutes-de.md
- - name: Definieren einer Navigation im Model oder ViewModel
+ - name: "Tutorial: Definieren einer Navigation im Model oder ViewModel"
uid: DevTKSS.Uno.ExtensionsNavigation.HowTo-DefiningModelOrViewModel.de
href: HowTo-ModelDefinition-de.md
- - name: Reagieren auf Routen Änderungen
+ - name: "Tutorial: Reagieren auf Routen Änderungen"
uid: DevTKSS.Uno.ExtensionsNavigation.HowTo-ChangeRoutes.de
href: HowTo-ChangeRoutes-de.md
\ No newline at end of file
diff --git a/docs/articles/en/HowTo-Using-DI-in-ctor-en.md b/docs/articles/en/HowTo-Using-DI-in-ctor-en.md
index ca40687..ae2a27b 100644
--- a/docs/articles/en/HowTo-Using-DI-in-ctor-en.md
+++ b/docs/articles/en/HowTo-Using-DI-in-ctor-en.md
@@ -3,9 +3,9 @@ uid: DevTKSS.Uno.Setup.Using-DI-in-ctor.en
---
## Guide: Use Constructor Parameters for Dependency Injection
-This guide assumes you've already created a Model, ViewModel, or a service class. If not, here's a quick guide to do that: (xref:DevTKSS.Uno.Setup.HowTo-AddingNew-VM-Class-Record.en)
+This guide assumes you've already created a Model, ViewModel, or a service class. If not, here's a [quick guide to do that](xref:DevTKSS.Uno.Setup.HowTo-AddingNew-VM-Class-Record.en).
-To use Dependency Injection in your Model, ViewModel, or any class, simply add the required (ideally) interfaces and/or service classes as constructor parameters. The DI container will provide them at runtime.
+To use **Dependency Injection** in your Model, ViewModel, or any class, simply add the required (*ideally*) interfaces and/or service classes as constructor parameters. The DI container will provide them at runtime.
## [In MVUX](#tab/model-with-di-params)
diff --git a/docs/articles/en/Introduction-en.md b/docs/articles/en/Introduction-en.md
index 5b866f2..9dd2612 100644
--- a/docs/articles/en/Introduction-en.md
+++ b/docs/articles/en/Introduction-en.md
@@ -4,23 +4,37 @@ uid: DevTKSS.Uno.SampleApps.Intro.en
# Hello and Welcome to the Documentation and Tutorials
-This documentation provides insights into various sample applications built using the Uno Platform. These samples are designed to assist developers of all skill levels in understanding and implementing the showcased concepts effectively.
+Here you will find practical guides and insights into various sample applications built using the **Uno Platform**.
+The tutorials help you—regardless of your prior knowledge—quickly understand the concepts shown and implement them directly.
-The samples in this Repository are meant to help other Developers, independent to their pre-knowledge, get an Idea of how to use the shown things.
+**🎯 Goal:** Community Tutorials to Support developers of all experience levels in getting started with the Uno Platform.
-
+---
+
+## First Steps
+
+- [Set Up Development Environment for Uno Platform App Development](xref:DevTKSS.Uno.Setup.DevelopmentEnvironment.en)
+- [Resource Collection for Getting Started with Uno App Development](xref:DevTKSS.Uno.ResourcesLookup.en)
+
+---
-## Current Samples List
+## Current Sample Apps
-To give you a quick overview of this Documentation, here is a List of quick links to the included Sample Apps. For future and more detailed Information, please lookup the depending Chapter via the Table of Contents.
+Here is a quick overview of the included samples. You can find detailed information in the respective chapter of the table of contents.
-- MvuxGallery
- - [Docs](xref:DevTKSS.Uno.SampleApps.MvuxGallery.Overview.en)
- - [source code](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.Samples.MvuxGallery/)
-- Mvux.XamlNavigationApp
- - [Docs](xref:DevTKSS.Uno.ExtensionsNavigation.HowTo-Defining-UI.en)
- - [source code](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.XamlNavigationApp-1/)
+### MvuxGallery
+
+- [View Documentation](xref:DevTKSS.Uno.SampleApps.MvuxGallery.Overview.en)
+- [View Source Code](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.Samples.MvuxGallery/)
+
+### XamlNavigationApp (Mvux)
+
+- [NavigationView in MVUX or MVVM + XAML](xref:DevTKSS.Uno.ExtensionsNavigation.Overview.en)
+- [View Source Code](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.XamlNavigationApp/)
+
+---
-## Next Steps
+## Additional Resources
-- [How To: Setup Development Environment for Uno Platform App Development](xref:DevTKSS.Uno.Setup.DevelopmentEnvironment.en)
+- [API Documentation](~/api/index.md)
+- [Uno Platform Official Documentation](https://platform.uno/docs/)
diff --git a/docs/articles/en/MvuxGallery-Overview-en.md b/docs/articles/en/MvuxGallery-Overview-en.md
index a80d809..9ee2a2c 100644
--- a/docs/articles/en/MvuxGallery-Overview-en.md
+++ b/docs/articles/en/MvuxGallery-Overview-en.md
@@ -15,12 +15,12 @@ As it contains already a lot of Controls and Features, I decided to create some
Here is a list of Controls and Features you can explore in the MvuxGallery App with links to their Source code in the MvuxGallery App:
- [Card](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.Samples.MvuxGallery/Presentation/Views/SimpleCardsPage.xaml)
-- [Counter](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.Samples.MvuxGallery/Presentation/Views/CounterPage.xaml)
-- [FeedView + GridView](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.Samples.MvuxGallery/Presentation/Views/DashboardPage.xaml)
-- [FeedView + ListView](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.Samples.MvuxGallery/Presentation/Views/ListboardPage.xaml)
-- [DataTemplate centralized Resource Definition](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.Samples.MvuxGallery/Styles/Generic.xaml)
+- [Counter](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.Samples.MvuxGallery/Presentation/Views/CounterPage.xaml) and [CounterModel](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.Samples.MvuxGallery/Presentation/ViewModels/CounterModel.cs)
+- [FeedView + GridView](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.Samples.MvuxGallery/Presentation/Views/DashboardPage.xaml) and [Model](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.Samples.MvuxGallery/Presentation/ViewModels/DashboardModel.cs)
+- [FeedView + ListView](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.Samples.MvuxGallery/Presentation/Views/ListboardPage.xaml) and [Model](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.Samples.MvuxGallery/Presentation/ViewModels/ListboardModel.cs)
+- [DataTemplate centralized Style Resource Definition](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.Samples.MvuxGallery/Styles/Generic.xaml)
- [`ItemOverlayTemplate` DataTemplate](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.Samples.MvuxGallery/Styles/Generic.xaml) (*Layout replicated from WinUI 3 Gallery*)
-- [TabBar and TabBarItem](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.Samples.MvuxGallery/Presentation/Views/DashboardPage.xaml) and [Model for Binding Items to ListFeed](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.Samples.MvuxGallery/Presentation/Views/DashboardPage.xaml.cs)
+- [TabBar and TabBarItem](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.Samples.MvuxGallery/Presentation/Views/DashboardPage.xaml) and [Model for Binding Items to ListFeed](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.Samples.MvuxGallery/Presentation/ViewModels/DashboardModel.cs)
## Sampled Uno.Extensions
diff --git a/docs/articles/en/Navigation/Extensions-Navigation-en.md b/docs/articles/en/Navigation/Extensions-Navigation-en.md
index d75cb6a..4338408 100644
--- a/docs/articles/en/Navigation/Extensions-Navigation-en.md
+++ b/docs/articles/en/Navigation/Extensions-Navigation-en.md
@@ -49,7 +49,7 @@ Once you have completed this step, we will continue with the implementation of n
---
-- [Here you can find the source code of the sample application XamlNavigationApp used](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.XamlNavigationApp-1)
+- [Here you can find the source code of the sample application XamlNavigationApp used](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.XamlNavigationApp)
### Uno Documentation Links
diff --git a/docs/articles/en/Navigation/HowTo-ChangeRoutes-en.md b/docs/articles/en/Navigation/HowTo-ChangeRoutes-en.md
index 0373362..86c957d 100644
--- a/docs/articles/en/Navigation/HowTo-ChangeRoutes-en.md
+++ b/docs/articles/en/Navigation/HowTo-ChangeRoutes-en.md
@@ -120,7 +120,7 @@ If you haven't done this yet, it's very easy to do it afterwards:
Now we only need the actual reaction to the route change. We do this in the `OnRouteChanged` method, which we registered in the constructor earlier. Here is an example of how you can implement this:
-[!code-csharp[](../../../../src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/MainModel.cs#L19-L22)]
+[!code-csharp[](../../../../src/DevTKSS.Uno.XamlNavigationApp/Presentation/MainModel.cs#L19-L22)]
**What happens here?**
@@ -141,7 +141,7 @@ Congratulations! You have successfully learned how to respond to route changes i
**Here is the complete code you should have in your Model from this tutorial:**
-[!code-csharp[](../../../../src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/MainModel.cs#L3-L25)]
+[!code-csharp[](../../../../src/DevTKSS.Uno.XamlNavigationApp/Presentation/MainModel.cs#L3-L25)]
## Links to Uno Documentation
diff --git a/docs/articles/en/Navigation/HowTo-Defining-UI-NavigationView-en.md b/docs/articles/en/Navigation/HowTo-Defining-UI-NavigationView-en.md
index dc936b6..eaad7f6 100644
--- a/docs/articles/en/Navigation/HowTo-Defining-UI-NavigationView-en.md
+++ b/docs/articles/en/Navigation/HowTo-Defining-UI-NavigationView-en.md
@@ -17,7 +17,7 @@ In this video, we will look together at how to set up and use a `NavigationView`
> [!NOTE]
> This video is currently only available in German, but transcriptions have been added to the video description, which should be usable through YouTube's auto-translate feature. You can also enable auto-translated subtitles in YouTube to follow along in your preferred language.
-
+
## Implementing the NavigationView
@@ -27,22 +27,22 @@ From this starting point, first remove the `StackPanel` including the controls i
```xml
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
```
@@ -67,7 +67,7 @@ Now we want to add the properties enabled by the extension, so-called `Attached
+
IsPaneToggleButtonVisible="True"
PaneDisplayMode="Auto">
@@ -140,7 +140,7 @@ Now we want to add the properties enabled by the extension, so-called `Attached
*The naming is by no means a coincidence!*
>[!NOTE]
- > The "Visibility" navigator is the available identifier for this property according to the documentation.
+ > The "Visibility" navigator is the only available identifier for this property [according to the Uno documentation](https://platform.uno/docs/articles/external/uno.extensions/doc/Learn/Navigation/HowTo-Regions.html#properties-in-the-region-class).
## Next Steps
diff --git a/docs/articles/en/Navigation/HowTo-RegisterRoutes-en.md b/docs/articles/en/Navigation/HowTo-RegisterRoutes-en.md
index 1477701..5113c9e 100644
--- a/docs/articles/en/Navigation/HowTo-RegisterRoutes-en.md
+++ b/docs/articles/en/Navigation/HowTo-RegisterRoutes-en.md
@@ -4,7 +4,7 @@ uid: DevTKSS.Uno.ExtensionsNavigation.HowTo-RegisterRoutes.en
# How-To: Register and Manage Routes
-With `Uno.Extensions.Navigation`, we use a central definition of **route registration** handled in the App class [`App.xaml.cs`(source link)](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.XamlNavigationApp-1/App.xaml.cs), which can simply be thought of as a map.
+With `Uno.Extensions.Navigation`, we use a central definition of **route registration** handled in the App class [`App.xaml.cs`(source link)](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps/blob/master/src/DevTKSS.Uno.XamlNavigationApp/App.xaml.cs), which can simply be thought of as a map.
## Prerequisites
@@ -22,7 +22,7 @@ Before you start with route registration, you need two things:
Add the required method to your App class below the `OnLaunched` method as follows:
-[!code-csharp[](../../../../src/DevTKSS.Uno.XamlNavigationApp-1/App.xaml.cs#L82)]
+[!code-csharp[](../../../../src/DevTKSS.Uno.XamlNavigationApp/App.xaml.cs#L82)]
## Defining the `ViewMap`'s
@@ -40,7 +40,7 @@ If additional data objects are required when navigating this route, you convert
For example, this is what it looks like in the XamlNavigationApp, where I no longer needed `Entity` and converted this route back accordingly:
-[!code-csharp[](../../../../src/DevTKSS.Uno.XamlNavigationApp-1/App.xaml.cs#L83-L89)]
+[!code-csharp[](../../../../src/DevTKSS.Uno.XamlNavigationApp/App.xaml.cs#L83-L89)]
## Hierarchically Structured `RoutesMap`'s
@@ -65,7 +65,7 @@ Now, on the `MainPage`, we might want to use a TabBar, NavigationBar, a Frame wi
**We do this, for example, like this:**
-[!code-csharp[](../../../../src/DevTKSS.Uno.XamlNavigationApp-1/App.xaml.cs#L96-L101)]
+[!code-csharp[](../../../../src/DevTKSS.Uno.XamlNavigationApp/App.xaml.cs#L88-L103)]
Here you can see that I added another page, the `DashboardPage`, and created a Model for it named `DashboardModel`. I also nested the `Second` route into the `RouteMap` of the `Main` route.
diff --git a/docs/articles/en/Navigation/Navigation-Options-en.md b/docs/articles/en/Navigation/Navigation-Options-en.md
index c8ee8f7..2898c1b 100644
--- a/docs/articles/en/Navigation/Navigation-Options-en.md
+++ b/docs/articles/en/Navigation/Navigation-Options-en.md
@@ -2,7 +2,7 @@
uid: DevTKSS.Uno.Navigation.Navigation-Options.en
---
-# How To: Choose Navigation Options for an Uno App
+# Navigation Options in an Uno App
Every application that comprises more than a single page benefits from the presence of a well-thought-out **navigation**.
diff --git a/docs/articles/en/Navigation/toc.yml b/docs/articles/en/Navigation/toc.yml
index 0875654..9d0385a 100644
--- a/docs/articles/en/Navigation/toc.yml
+++ b/docs/articles/en/Navigation/toc.yml
@@ -1,5 +1,5 @@
items:
- - name: "Navigation Options in an Uno App"
+ - name: "Navigation Options in our Uno Apps"
uid: DevTKSS.Uno.Navigation.Navigation-Options.en
href: Navigation-Options-en.md
- name: "Navigation with Uno Extensions"
@@ -7,21 +7,21 @@ items:
href: Extensions-Navigation-en.md
- name: Create or Upgrade
items:
- - name: "Create App (Wizard/CLI)"
+ - name: "How To: Create new Uno App (Wizard/CLI)"
uid: DevTKSS.Uno.Setup.HowTo-CreateNewUnoApp.en
href: ../HowTo-CreateApp-en.md
- - name: "Upgrade an Existing App"
+ - name: "How To: Upgrade an Existing Uno App"
uid: DevTKSS.Uno.ExtensionsNavigation.UpgradeExistingApp.en
href: HowTo-UpgradeExistingApp-en.md
- - name: "Define UI with NavigationView"
+ - name: "How To: Define UI with NavigationView"
uid: DevTKSS.Uno.ExtensionsNavigation.HowTo-Defining-UI.en
href: HowTo-Defining-UI-NavigationView-en.md
- - name: "Register Routes"
+ - name: "How To: Register Routes"
uid: DevTKSS.Uno.ExtensionsNavigation.HowTo-RegisterRoutes.en
href: HowTo-RegisterRoutes-en.md
- - name: "Define Navigation in Model or ViewModel"
+ - name: "How to: Define Navigation in Model or ViewModel"
uid: DevTKSS.Uno.ExtensionsNavigation.HowTo-DefiningModelOrViewModel.en
href: HowTo-ModelDefinition-en.md
- - name: "React to Route Changes"
+ - name: "How to: React to Route Changes"
uid: DevTKSS.Uno.ExtensionsNavigation.HowTo-ChangeRoutes.en
href: HowTo-ChangeRoutes-en.md
\ No newline at end of file
diff --git a/docs/articles/en/toc.yml b/docs/articles/en/toc.yml
index c848deb..f094fcd 100644
--- a/docs/articles/en/toc.yml
+++ b/docs/articles/en/toc.yml
@@ -16,7 +16,7 @@
- name: "Create a New Uno App"
uid: DevTKSS.Uno.Setup.HowTo-CreateNewUnoApp.en
href: HowTo-CreateApp-en.md
- - name: "Add Pages"
+ - name: "Add new Pages"
uid: DevTKSS.Uno.Setup.HowTo-AddingNewPages.en
href: HowTo-Adding-New-Pages-en.md
- name: "Define New Class or Record ViewModels"
diff --git a/src/global.json b/global.json
similarity index 100%
rename from src/global.json
rename to global.json
diff --git a/src/.vscode/extensions.json b/src/.vscode/extensions.json
deleted file mode 100644
index a63ad40..0000000
--- a/src/.vscode/extensions.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "recommendations": [
- "unoplatform.vscode"
- ],
-}
diff --git a/src/.vscode/settings.json b/src/.vscode/settings.json
deleted file mode 100644
index 048b4f9..0000000
--- a/src/.vscode/settings.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "explorer.fileNesting.enabled": true,
- "explorer.fileNesting.expand": false,
- "explorer.fileNesting.patterns": {
- "*.xaml": "$(capture).xaml.cs"
- },
- "files.associations": {
- "global.json": "jsonc"
- },
-}
\ No newline at end of file
diff --git a/src/DevTKSS.Extensions.Uno-ExtensionsOnly.slnf b/src/DevTKSS.Extensions.Uno-ExtensionsOnly.slnf
index b921b0c..ec2fde0 100644
--- a/src/DevTKSS.Extensions.Uno-ExtensionsOnly.slnf
+++ b/src/DevTKSS.Extensions.Uno-ExtensionsOnly.slnf
@@ -1,6 +1,6 @@
{
"solution": {
- "path": "DevTKSS.Uno.Samples.sln",
+ "path": "..\\DevTKSS.Uno.SampleApps.slnx",
"projects": [
"DevTKSS.Extensions.Uno\\DevTKSS.Extensions.Uno.csproj"
]
diff --git a/src/DevTKSS.Uno.SampleApps-GalleryOnly.slnf b/src/DevTKSS.Uno.SampleApps-GalleryOnly.slnf
index 693237c..f7fac6d 100644
--- a/src/DevTKSS.Uno.SampleApps-GalleryOnly.slnf
+++ b/src/DevTKSS.Uno.SampleApps-GalleryOnly.slnf
@@ -1,6 +1,6 @@
{
"solution": {
- "path": "DevTKSS.Uno.Samples.sln",
+ "path": "..\\DevTKSS.Uno.SampleApps.slnx",
"projects": [
"DevTKSS.Extensions.Uno\\DevTKSS.Extensions.Uno.csproj",
"DevTKSS.Uno.Samples.MvuxGallery\\DevTKSS.Uno.Samples.MvuxGallery.csproj"
diff --git a/src/DevTKSS.Uno.SampleApps-Tutorials.slnf b/src/DevTKSS.Uno.SampleApps-Tutorials.slnf
index 8753fec..0278fab 100644
--- a/src/DevTKSS.Uno.SampleApps-Tutorials.slnf
+++ b/src/DevTKSS.Uno.SampleApps-Tutorials.slnf
@@ -1,8 +1,8 @@
{
"solution": {
- "path": "DevTKSS.Uno.Samples.sln",
+ "path": "..\\DevTKSS.Uno.SampleApps.slnx",
"projects": [
- "DevTKSS.Uno.XamlNavigationApp-1\\DevTKSS.Uno.XamlNavigationApp.csproj"
+ "DevTKSS.Uno.XamlNavigationApp\\DevTKSS.Uno.XamlNavigationApp.csproj"
]
}
}
\ No newline at end of file
diff --git a/src/DevTKSS.Uno.Samples.sln b/src/DevTKSS.Uno.Samples.sln
deleted file mode 100644
index 0c99588..0000000
--- a/src/DevTKSS.Uno.Samples.sln
+++ /dev/null
@@ -1,75 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.12.35521.163
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{E743ECB2-9BD7-4FBF-B90B-AA75D48758DB}"
- ProjectSection(SolutionItems) = preProject
- .gitignore = .gitignore
- Directory.Build.props = Directory.Build.props
- Directory.Build.targets = Directory.Build.targets
- Directory.Packages.props = Directory.Packages.props
- global.json = global.json
- ..\README.md = ..\README.md
- EndProjectSection
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DevTKSS.Uno.Samples.MvuxGallery", "DevTKSS.Uno.Samples.MvuxGallery\DevTKSS.Uno.Samples.MvuxGallery.csproj", "{541B1686-7761-9408-94BD-1E25D46AAC83}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DevTKSS.Uno.XamlNavigationApp", "DevTKSS.Uno.XamlNavigationApp-1\DevTKSS.Uno.XamlNavigationApp.csproj", "{AE75474D-B5FC-3152-7897-AB178447428A}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DevTKSS.Extensions.Uno.Storage", "DevTKSS.Extensions.Uno.Storage\DevTKSS.Extensions.Uno.Storage.csproj", "{0C51BF5A-7C98-4BE2-3ED6-A5796C06AB8E}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Debug|x64 = Debug|x64
- Debug|x86 = Debug|x86
- Release|Any CPU = Release|Any CPU
- Release|x64 = Release|x64
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {541B1686-7761-9408-94BD-1E25D46AAC83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {541B1686-7761-9408-94BD-1E25D46AAC83}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {541B1686-7761-9408-94BD-1E25D46AAC83}.Debug|x64.ActiveCfg = Debug|Any CPU
- {541B1686-7761-9408-94BD-1E25D46AAC83}.Debug|x64.Build.0 = Debug|Any CPU
- {541B1686-7761-9408-94BD-1E25D46AAC83}.Debug|x86.ActiveCfg = Debug|Any CPU
- {541B1686-7761-9408-94BD-1E25D46AAC83}.Debug|x86.Build.0 = Debug|Any CPU
- {541B1686-7761-9408-94BD-1E25D46AAC83}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {541B1686-7761-9408-94BD-1E25D46AAC83}.Release|Any CPU.Build.0 = Release|Any CPU
- {541B1686-7761-9408-94BD-1E25D46AAC83}.Release|x64.ActiveCfg = Release|Any CPU
- {541B1686-7761-9408-94BD-1E25D46AAC83}.Release|x64.Build.0 = Release|Any CPU
- {541B1686-7761-9408-94BD-1E25D46AAC83}.Release|x86.ActiveCfg = Release|Any CPU
- {541B1686-7761-9408-94BD-1E25D46AAC83}.Release|x86.Build.0 = Release|Any CPU
- {AE75474D-B5FC-3152-7897-AB178447428A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {AE75474D-B5FC-3152-7897-AB178447428A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {AE75474D-B5FC-3152-7897-AB178447428A}.Debug|x64.ActiveCfg = Debug|Any CPU
- {AE75474D-B5FC-3152-7897-AB178447428A}.Debug|x64.Build.0 = Debug|Any CPU
- {AE75474D-B5FC-3152-7897-AB178447428A}.Debug|x86.ActiveCfg = Debug|Any CPU
- {AE75474D-B5FC-3152-7897-AB178447428A}.Debug|x86.Build.0 = Debug|Any CPU
- {AE75474D-B5FC-3152-7897-AB178447428A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {AE75474D-B5FC-3152-7897-AB178447428A}.Release|Any CPU.Build.0 = Release|Any CPU
- {AE75474D-B5FC-3152-7897-AB178447428A}.Release|x64.ActiveCfg = Release|Any CPU
- {AE75474D-B5FC-3152-7897-AB178447428A}.Release|x64.Build.0 = Release|Any CPU
- {AE75474D-B5FC-3152-7897-AB178447428A}.Release|x86.ActiveCfg = Release|Any CPU
- {AE75474D-B5FC-3152-7897-AB178447428A}.Release|x86.Build.0 = Release|Any CPU
- {0C51BF5A-7C98-4BE2-3ED6-A5796C06AB8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0C51BF5A-7C98-4BE2-3ED6-A5796C06AB8E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0C51BF5A-7C98-4BE2-3ED6-A5796C06AB8E}.Debug|x64.ActiveCfg = Debug|Any CPU
- {0C51BF5A-7C98-4BE2-3ED6-A5796C06AB8E}.Debug|x64.Build.0 = Debug|Any CPU
- {0C51BF5A-7C98-4BE2-3ED6-A5796C06AB8E}.Debug|x86.ActiveCfg = Debug|Any CPU
- {0C51BF5A-7C98-4BE2-3ED6-A5796C06AB8E}.Debug|x86.Build.0 = Debug|Any CPU
- {0C51BF5A-7C98-4BE2-3ED6-A5796C06AB8E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0C51BF5A-7C98-4BE2-3ED6-A5796C06AB8E}.Release|Any CPU.Build.0 = Release|Any CPU
- {0C51BF5A-7C98-4BE2-3ED6-A5796C06AB8E}.Release|x64.ActiveCfg = Release|Any CPU
- {0C51BF5A-7C98-4BE2-3ED6-A5796C06AB8E}.Release|x64.Build.0 = Release|Any CPU
- {0C51BF5A-7C98-4BE2-3ED6-A5796C06AB8E}.Release|x86.ActiveCfg = Release|Any CPU
- {0C51BF5A-7C98-4BE2-3ED6-A5796C06AB8E}.Release|x86.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {13A54FC3-A0D0-4DC3-8785-25DFA362BE4D}
- EndGlobalSection
-EndGlobal
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/App.xaml b/src/DevTKSS.Uno.SimpleMemberSelectionApp/App.xaml
new file mode 100644
index 0000000..e4d783f
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/App.xaml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/App.xaml.cs b/src/DevTKSS.Uno.SimpleMemberSelectionApp/App.xaml.cs
similarity index 96%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/App.xaml.cs
rename to src/DevTKSS.Uno.SimpleMemberSelectionApp/App.xaml.cs
index ad95c0e..f5df262 100644
--- a/src/DevTKSS.Uno.XamlNavigationApp-1/App.xaml.cs
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/App.xaml.cs
@@ -1,6 +1,6 @@
using Uno.Resizetizer;
-namespace DevTKSS.Uno.XamlNavigationApp;
+namespace DevTKSS.Uno.SimpleMemberSelectionApp;
public partial class App : Application
{
///
@@ -95,7 +95,7 @@ private static void RegisterRoutes(IViewRegistry views, IRouteRegistry routes)
new ("Main", View: views.FindByViewModel(), IsDefault:true,
Nested:
[
- new("Dashboard", View: views.FindByViewModel(),IsDefault:true),
+ new ("Dashboard", View: views.FindByViewModel(),IsDefault:true),
new ("Second", View: views.FindByViewModel())
])
]
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Assets/Icons/icon.svg b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Assets/Icons/icon.svg
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Assets/Icons/icon.svg
rename to src/DevTKSS.Uno.SimpleMemberSelectionApp/Assets/Icons/icon.svg
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Assets/Icons/icon_foreground.svg b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Assets/Icons/icon_foreground.svg
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Assets/Icons/icon_foreground.svg
rename to src/DevTKSS.Uno.SimpleMemberSelectionApp/Assets/Icons/icon_foreground.svg
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Assets/SharedAssets.md b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Assets/SharedAssets.md
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Assets/SharedAssets.md
rename to src/DevTKSS.Uno.SimpleMemberSelectionApp/Assets/SharedAssets.md
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Assets/Splash/splash_screen.svg b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Assets/Splash/splash_screen.svg
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Assets/Splash/splash_screen.svg
rename to src/DevTKSS.Uno.SimpleMemberSelectionApp/Assets/Splash/splash_screen.svg
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/DevTKSS.Uno.XamlNavigationApp.csproj b/src/DevTKSS.Uno.SimpleMemberSelectionApp/DevTKSS.Uno.XamlNavigationApp.csproj
new file mode 100644
index 0000000..6b47f70
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/DevTKSS.Uno.XamlNavigationApp.csproj
@@ -0,0 +1,39 @@
+
+
+ net9.0-desktop
+
+ Exe
+ true
+
+
+ DevTKSS.Uno.SimpleMemberSelectionApp
+
+ com.DevTKSS.SimpleMemberSelectionApp
+
+ 1.0
+ 1
+
+ Sonja
+
+ DevTKSS SimpleMemberSelectionApp powered by Uno Platform.
+
+
+
+ Material;
+ Dsp;
+ Hosting;
+ Toolkit;
+ Logging;
+ MVUX;
+ Configuration;
+ Localization;
+ Navigation;
+ ThemeService;
+ SkiaRenderer;
+
+
+
+
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/GlobalUsings.cs b/src/DevTKSS.Uno.SimpleMemberSelectionApp/GlobalUsings.cs
new file mode 100644
index 0000000..cdf2f23
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/GlobalUsings.cs
@@ -0,0 +1,10 @@
+global using System.Collections.Immutable;
+global using Microsoft.Extensions.DependencyInjection;
+global using Microsoft.Extensions.Hosting;
+global using Microsoft.Extensions.Localization;
+global using Microsoft.Extensions.Logging;
+global using Microsoft.Extensions.Options;
+global using DevTKSS.Uno.SimpleMemberSelectionApp.Models;
+global using DevTKSS.Uno.SimpleMemberSelectionApp.Presentation;
+global using ApplicationExecutionState = Windows.ApplicationModel.Activation.ApplicationExecutionState;
+[assembly: Uno.Extensions.Reactive.Config.BindableGenerationTool(3)]
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/Models/AppConfig.cs b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Models/AppConfig.cs
new file mode 100644
index 0000000..4744db3
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Models/AppConfig.cs
@@ -0,0 +1,6 @@
+namespace DevTKSS.Uno.SimpleMemberSelectionApp.Models;
+
+public record AppConfig
+{
+ public string? Environment { get; init; }
+}
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/Models/Entity.cs b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Models/Entity.cs
new file mode 100644
index 0000000..2406c23
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Models/Entity.cs
@@ -0,0 +1,3 @@
+namespace DevTKSS.Uno.SimpleMemberSelectionApp.Models;
+
+public record Entity(string Name);
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Package.appxmanifest b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Package.appxmanifest
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Package.appxmanifest
rename to src/DevTKSS.Uno.SimpleMemberSelectionApp/Package.appxmanifest
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/Platforms/Desktop/Program.cs b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Platforms/Desktop/Program.cs
new file mode 100644
index 0000000..896d2cf
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Platforms/Desktop/Program.cs
@@ -0,0 +1,12 @@
+using Uno.UI.Hosting;
+using DevTKSS.Uno.SimpleMemberSelectionApp;
+
+var host = UnoPlatformHostBuilder.Create()
+ .App(() => new App())
+ .UseX11()
+ .UseLinuxFrameBuffer()
+ .UseMacOS()
+ .UseWin32()
+ .Build();
+
+host.Run();
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/DashboardModel.cs b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/DashboardModel.cs
similarity index 92%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/DashboardModel.cs
rename to src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/DashboardModel.cs
index 239d52e..d1fa1cd 100644
--- a/src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/DashboardModel.cs
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/DashboardModel.cs
@@ -1,4 +1,4 @@
-namespace DevTKSS.Uno.XamlNavigationApp.Presentation;
+namespace DevTKSS.Uno.SimpleMemberSelectionApp.Presentation;
public partial record DashboardModel
{
public DashboardModel()
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/DashboardPage.xaml b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/DashboardPage.xaml
similarity index 88%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/DashboardPage.xaml
rename to src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/DashboardPage.xaml
index 1487e5f..5efd5cb 100644
--- a/src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/DashboardPage.xaml
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/DashboardPage.xaml
@@ -1,8 +1,8 @@
+
+ 20,20,20,20
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/MainPage.xaml.cs b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/MainPage.xaml.cs
new file mode 100644
index 0000000..46724dd
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/MainPage.xaml.cs
@@ -0,0 +1,9 @@
+namespace DevTKSS.Uno.SimpleMemberSelectionApp.Presentation;
+
+public sealed partial class MainPage : Page
+{
+ public MainPage()
+ {
+ this.InitializeComponent();
+ }
+}
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/SecondModel.cs b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/SecondModel.cs
new file mode 100644
index 0000000..5c4e87a
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/SecondModel.cs
@@ -0,0 +1,10 @@
+namespace DevTKSS.Uno.SimpleMemberSelectionApp.Presentation;
+
+public partial record SecondModel
+{
+ public SecondModel()
+ {
+
+ }
+ public IState SecondTitle => State.Value(this, () => "Hallo vom Second");
+}
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/SecondPage.xaml b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/SecondPage.xaml
new file mode 100644
index 0000000..413e353
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/SecondPage.xaml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/SecondPage.xaml.cs b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/SecondPage.xaml.cs
new file mode 100644
index 0000000..98a1f1d
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/SecondPage.xaml.cs
@@ -0,0 +1,10 @@
+namespace DevTKSS.Uno.SimpleMemberSelectionApp.Presentation;
+
+public sealed partial class SecondPage : Page
+{
+ public SecondPage()
+ {
+ this.InitializeComponent();
+ }
+}
+
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/Shell.xaml b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/Shell.xaml
new file mode 100644
index 0000000..443e7b2
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/Shell.xaml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/Shell.xaml.cs b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/Shell.xaml.cs
new file mode 100644
index 0000000..3787074
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/Shell.xaml.cs
@@ -0,0 +1,10 @@
+namespace DevTKSS.Uno.SimpleMemberSelectionApp.Presentation;
+
+public sealed partial class Shell : UserControl, IContentControlProvider
+{
+ public Shell()
+ {
+ this.InitializeComponent();
+ }
+ public ContentControl ContentControl => Splash;
+}
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/ShellModel.cs b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/ShellModel.cs
new file mode 100644
index 0000000..428887e
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Presentation/ShellModel.cs
@@ -0,0 +1,13 @@
+namespace DevTKSS.Uno.SimpleMemberSelectionApp.Presentation;
+
+public class ShellModel
+{
+ private readonly INavigator _navigator;
+
+ public ShellModel(
+ INavigator navigator)
+ {
+ _navigator = navigator;
+ // Add code here to initialize or attach event handlers to singleton services
+ }
+}
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Properties/PublishProfiles/win-arm64.pubxml b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Properties/PublishProfiles/win-arm64.pubxml
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Properties/PublishProfiles/win-arm64.pubxml
rename to src/DevTKSS.Uno.SimpleMemberSelectionApp/Properties/PublishProfiles/win-arm64.pubxml
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Properties/PublishProfiles/win-x64.pubxml b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Properties/PublishProfiles/win-x64.pubxml
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Properties/PublishProfiles/win-x64.pubxml
rename to src/DevTKSS.Uno.SimpleMemberSelectionApp/Properties/PublishProfiles/win-x64.pubxml
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Properties/PublishProfiles/win-x86.pubxml b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Properties/PublishProfiles/win-x86.pubxml
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Properties/PublishProfiles/win-x86.pubxml
rename to src/DevTKSS.Uno.SimpleMemberSelectionApp/Properties/PublishProfiles/win-x86.pubxml
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/Properties/launchSettings.json b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Properties/launchSettings.json
new file mode 100644
index 0000000..e6b7afc
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Properties/launchSettings.json
@@ -0,0 +1,22 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:8080",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "DevTKSS.Uno.SimpleMemberSelectionApp (Desktop)": {
+ "commandName": "Project",
+ "compatibleTargetFramework": "desktop"
+ },
+ "DevTKSS.Uno.SimpleMemberSelectionApp (Desktop WSL2)": {
+ "commandName": "WSL2",
+ "commandLineArgs": "{ProjectDir}/bin/Debug/net9.0-desktop/DevTKSS.Uno.SimpleMemberSelectionApp.dll",
+ "distributionName": "",
+ "compatibleTargetFramework": "desktop"
+ }
+ }
+}
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/ReadMe.de.md b/src/DevTKSS.Uno.SimpleMemberSelectionApp/ReadMe.de.md
new file mode 100644
index 0000000..bffd189
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/ReadMe.de.md
@@ -0,0 +1,22 @@
+---
+uid: DevTKSS.Uno.SampleApps.Mvux.SimpleMemberSelectionApp
+---
+
+# DevTKSS.Uno.SampleApps.Mvux.SimpleMemberSelectionApp.de
+
+Willkommen bei der Uno Platform und insbesondere bei diesem Community-Tutorial-Beispiel!
+
+## Erste Schritte
+
+Wie du mit deiner neuen App loslegst: [Link zur Uno Doku `Getting Started`](https://aka.platform.uno/get-started)
+
+Weitere Informationen zur Verwendung des Uno.Sdk oder zum Aktualisieren der Uno Platform-Pakete in deiner Lösung: [Das Uno.Sdk benutzen](https://aka.platform.uno/using-uno-sdk)
+
+## Tutorial zum Mitmachen
+
+Diese Beispiel-App hat bisher kein dokumentiertes Tutorial, aber du kannst dir schon den auf YouTube verfügbaren Video-Guide ansehen:
+[How To: Binden von ListState und ImmutableList zu FeedView & ListView im UI | Uno Community Tutorial](https://youtu.be/wOsSlv1YFic)
+
+## Mitwirken
+
+Wenn du zu diesem Beispiel beitragen möchtest, wirf einen Blick auf das [GitHub repository](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps)
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/ReadMe.en.md b/src/DevTKSS.Uno.SimpleMemberSelectionApp/ReadMe.en.md
new file mode 100644
index 0000000..5ed5d21
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/ReadMe.en.md
@@ -0,0 +1,22 @@
+---
+uid: DevTKSS.Uno.SampleApps.Mvux.SimpleMemberSelectionApp
+---
+
+# DevTKSS.Uno.SampleApps.Mvux.SimpleMemberSelectionApp.en
+
+Welcome to the Uno Platform and particularly this Community Tutorial Sample!
+
+## Getting Started
+
+To discover how to get started with your new app: [Link to the Uno `Getting Started`](https://aka.platform.uno/get-started)
+
+For more information on how to use the Uno.Sdk or upgrade Uno Platform packages in your solution: [Using the Uno.Sdk](https://aka.platform.uno/using-uno-sdk)
+
+## Tutorial to follow along with this sample
+
+This sample app has no Documented Tutorial by now, but you can check out the Video Guide already available on YouTube:
+[How To: Binden von ListState und ImmutableList zu FeedView & ListView im UI | Uno Community Tutorial](https://youtu.be/wOsSlv1YFic) (Deutsch => Switch on Subtitles for English)
+
+## Contributing
+
+If you want to contribute to this sample, please check out the [GitHub repository](https://github.com/DevTKSS/DevTKSS.Uno.SampleApps)
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/Services/Endpoints/DebugHandler.cs b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Services/Endpoints/DebugHandler.cs
new file mode 100644
index 0000000..0bb1f52
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Services/Endpoints/DebugHandler.cs
@@ -0,0 +1,44 @@
+namespace DevTKSS.Uno.SimpleMemberSelectionApp.Services.Endpoints;
+
+internal class DebugHttpHandler : DelegatingHandler
+{
+ private readonly ILogger _logger;
+
+ public DebugHttpHandler(ILogger logger, HttpMessageHandler? innerHandler = null)
+ : base(innerHandler ?? new HttpClientHandler())
+ {
+ _logger = logger;
+ }
+
+ protected async override Task SendAsync(
+ HttpRequestMessage request,
+ CancellationToken cancellationToken)
+ {
+ var response = await base.SendAsync(request, cancellationToken);
+#if DEBUG
+ if (!response.IsSuccessStatusCode)
+ {
+ _logger.LogDebugMessage("Unsuccessful API Call");
+ if (request.RequestUri is not null)
+ {
+ _logger.LogDebugMessage($"{request.RequestUri} ({request.Method})");
+ }
+
+ foreach ((var key, var values) in request.Headers.ToDictionary(x => x.Key, x => string.Join(", ", x.Value)))
+ {
+ _logger.LogDebugMessage($"{key}: {values}");
+ }
+
+ var content = request.Content is not null ? await request.Content.ReadAsStringAsync() : null;
+ if (!string.IsNullOrEmpty(content))
+ {
+ _logger.LogDebugMessage(content);
+ }
+
+ // Uncomment to automatically break when an API call fails while debugging
+ // System.Diagnostics.Debugger.Break();
+ }
+#endif
+ return response;
+ }
+}
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/Strings/en/Resources.resw b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Strings/en/Resources.resw
new file mode 100644
index 0000000..8430a7f
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Strings/en/Resources.resw
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ DevTKSS SimpleMemberSelectionApp-en
+
+
\ No newline at end of file
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/Strings/es/Resources.resw b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Strings/es/Resources.resw
new file mode 100644
index 0000000..674d3b2
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Strings/es/Resources.resw
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ DevTKSS SimpleMemberSelectionApp-es
+
+
\ No newline at end of file
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/Strings/fr/Resources.resw b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Strings/fr/Resources.resw
new file mode 100644
index 0000000..fb20610
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Strings/fr/Resources.resw
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ DevTKSS SimpleMemberSelectionApp-fr
+
+
\ No newline at end of file
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/Strings/pt-BR/Resources.resw b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Strings/pt-BR/Resources.resw
new file mode 100644
index 0000000..5ac307d
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Strings/pt-BR/Resources.resw
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ DevTKSS SimpleMemberSelectionApp-pt-BR
+
+
\ No newline at end of file
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Styles/ColorPaletteOverride.json b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Styles/ColorPaletteOverride.json
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Styles/ColorPaletteOverride.json
rename to src/DevTKSS.Uno.SimpleMemberSelectionApp/Styles/ColorPaletteOverride.json
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Styles/ColorPaletteOverride.xaml b/src/DevTKSS.Uno.SimpleMemberSelectionApp/Styles/ColorPaletteOverride.xaml
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Styles/ColorPaletteOverride.xaml
rename to src/DevTKSS.Uno.SimpleMemberSelectionApp/Styles/ColorPaletteOverride.xaml
diff --git a/src/DevTKSS.Uno.SimpleMemberSelectionApp/app.manifest b/src/DevTKSS.Uno.SimpleMemberSelectionApp/app.manifest
new file mode 100644
index 0000000..8bea0c8
--- /dev/null
+++ b/src/DevTKSS.Uno.SimpleMemberSelectionApp/app.manifest
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true/PM
+ PerMonitorV2, PerMonitor
+
+
+
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/appsettings.development.json b/src/DevTKSS.Uno.SimpleMemberSelectionApp/appsettings.development.json
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/appsettings.development.json
rename to src/DevTKSS.Uno.SimpleMemberSelectionApp/appsettings.development.json
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/appsettings.json b/src/DevTKSS.Uno.SimpleMemberSelectionApp/appsettings.json
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/appsettings.json
rename to src/DevTKSS.Uno.SimpleMemberSelectionApp/appsettings.json
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/App.xaml b/src/DevTKSS.Uno.XamlNavigationApp/App.xaml
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/App.xaml
rename to src/DevTKSS.Uno.XamlNavigationApp/App.xaml
diff --git a/src/DevTKSS.Uno.XamlNavigationApp/App.xaml.cs b/src/DevTKSS.Uno.XamlNavigationApp/App.xaml.cs
new file mode 100644
index 0000000..050f53c
--- /dev/null
+++ b/src/DevTKSS.Uno.XamlNavigationApp/App.xaml.cs
@@ -0,0 +1,103 @@
+using Uno.Resizetizer;
+
+namespace DevTKSS.Uno.XamlNavigationApp;
+public partial class App : Application
+{
+ ///
+ /// Initializes the singleton application object. This is the first line of authored code
+ /// executed, and as such is the logical equivalent of main() or WinMain().
+ ///
+ public App()
+ {
+ this.InitializeComponent();
+ }
+
+ protected Window? MainWindow { get; private set; }
+ protected IHost? Host { get; private set; }
+
+ protected async override void OnLaunched(LaunchActivatedEventArgs args)
+ {
+ var builder = this.CreateBuilder(args)
+ // Add navigation support for toolkit controls such as TabBar and NavigationView
+ .UseToolkitNavigation()
+ .Configure(host => host
+#if DEBUG
+ // Switch to Development environment when running in DEBUG
+ .UseEnvironment(Environments.Development)
+#endif
+ .UseLogging(configure: (context, logBuilder) =>
+ {
+ // Configure log levels for different categories of logging
+ logBuilder
+ .SetMinimumLevel(
+ context.HostingEnvironment.IsDevelopment() ?
+ LogLevel.Information :
+ LogLevel.Warning)
+
+ // Default filters for core Uno Platform namespaces
+ .CoreLogLevel(LogLevel.Warning);
+
+ // Uno Platform namespace filter groups
+ // Uncomment individual methods to see more detailed logging
+ //// Generic Xaml events
+ //logBuilder.XamlLogLevel(LogLevel.Debug);
+ //// Layout specific messages
+ //logBuilder.XamlLayoutLogLevel(LogLevel.Debug);
+ //// Storage messages
+ //logBuilder.StorageLogLevel(LogLevel.Debug);
+ //// Binding related messages
+ //logBuilder.XamlBindingLogLevel(LogLevel.Debug);
+ //// Binder memory references tracking
+ //logBuilder.BinderMemoryReferenceLogLevel(LogLevel.Debug);
+ //// DevServer and HotReload related
+ //logBuilder.HotReloadCoreLogLevel(LogLevel.Information);
+ //// Debug JS interop
+ //logBuilder.WebAssemblyLogLevel(LogLevel.Debug);
+
+ }, enableUnoLogging: true)
+ .UseConfiguration(configure: configBuilder =>
+ configBuilder
+ .EmbeddedSource()
+ .Section()
+ )
+ .ConfigureServices((context, services) =>
+ {
+ // TODO: Register your services
+ //services.AddSingleton();
+ })
+ .UseNavigation(ReactiveViewModelMappings.ViewModelMappings, RegisterRoutes)
+ );
+ MainWindow = builder.Window;
+
+#if DEBUG
+ MainWindow.UseStudio();
+#endif
+ MainWindow.SetWindowIcon();
+
+ Host = await builder.NavigateAsync();
+ }
+
+ private static void RegisterRoutes(IViewRegistry views, IRouteRegistry routes)
+ {
+ views.Register(
+ new ViewMap(ViewModel: typeof(ShellModel)),
+ new ViewMap(),
+ new ViewMap(),
+ new ViewMap()
+ );
+
+ routes.Register(
+ new RouteMap("", View: views.FindByViewModel(),
+ Nested:
+ [
+ new ("Main", View: views.FindByViewModel(), IsDefault:true,
+ Nested:
+ [
+ new ("Dashboard", View: views.FindByViewModel(),IsDefault:true),
+ new ("Second", View: views.FindByViewModel())
+ ])
+ ]
+ )
+ );
+ }
+}
diff --git a/src/DevTKSS.Uno.XamlNavigationApp/Assets/Icons/icon.svg b/src/DevTKSS.Uno.XamlNavigationApp/Assets/Icons/icon.svg
new file mode 100644
index 0000000..a15af53
--- /dev/null
+++ b/src/DevTKSS.Uno.XamlNavigationApp/Assets/Icons/icon.svg
@@ -0,0 +1,42 @@
+
+
diff --git a/src/DevTKSS.Uno.XamlNavigationApp/Assets/Icons/icon_foreground.svg b/src/DevTKSS.Uno.XamlNavigationApp/Assets/Icons/icon_foreground.svg
new file mode 100644
index 0000000..8ffc41a
--- /dev/null
+++ b/src/DevTKSS.Uno.XamlNavigationApp/Assets/Icons/icon_foreground.svg
@@ -0,0 +1,137 @@
+
+
diff --git a/src/DevTKSS.Uno.XamlNavigationApp/Assets/SharedAssets.md b/src/DevTKSS.Uno.XamlNavigationApp/Assets/SharedAssets.md
new file mode 100644
index 0000000..b1cc4e7
--- /dev/null
+++ b/src/DevTKSS.Uno.XamlNavigationApp/Assets/SharedAssets.md
@@ -0,0 +1,32 @@
+# Shared Assets
+
+See documentation about assets here: https://github.com/unoplatform/uno/blob/master/doc/articles/features/working-with-assets.md
+
+## Here is a cheat sheet
+
+1. Add the image file to the `Assets` directory of a shared project.
+2. Set the build action to `Content`.
+3. (Recommended) Provide an asset for various scales/dpi
+
+### Examples
+
+```text
+\Assets\Images\logo.scale-100.png
+\Assets\Images\logo.scale-200.png
+\Assets\Images\logo.scale-400.png
+
+\Assets\Images\scale-100\logo.png
+\Assets\Images\scale-200\logo.png
+\Assets\Images\scale-400\logo.png
+```
+
+### Table of scales
+
+| Scale | WinUI | iOS | Android |
+|-------|:-----------:|:---------------:|:-------:|
+| `100` | scale-100 | @1x | mdpi |
+| `125` | scale-125 | N/A | N/A |
+| `150` | scale-150 | N/A | hdpi |
+| `200` | scale-200 | @2x | xhdpi |
+| `300` | scale-300 | @3x | xxhdpi |
+| `400` | scale-400 | N/A | xxxhdpi |
diff --git a/src/DevTKSS.Uno.XamlNavigationApp/Assets/Splash/splash_screen.svg b/src/DevTKSS.Uno.XamlNavigationApp/Assets/Splash/splash_screen.svg
new file mode 100644
index 0000000..8ffc41a
--- /dev/null
+++ b/src/DevTKSS.Uno.XamlNavigationApp/Assets/Splash/splash_screen.svg
@@ -0,0 +1,137 @@
+
+
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/DevTKSS.Uno.XamlNavigationApp.csproj b/src/DevTKSS.Uno.XamlNavigationApp/DevTKSS.Uno.XamlNavigationApp.csproj
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/DevTKSS.Uno.XamlNavigationApp.csproj
rename to src/DevTKSS.Uno.XamlNavigationApp/DevTKSS.Uno.XamlNavigationApp.csproj
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/GlobalUsings.cs b/src/DevTKSS.Uno.XamlNavigationApp/GlobalUsings.cs
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/GlobalUsings.cs
rename to src/DevTKSS.Uno.XamlNavigationApp/GlobalUsings.cs
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Models/AppConfig.cs b/src/DevTKSS.Uno.XamlNavigationApp/Models/AppConfig.cs
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Models/AppConfig.cs
rename to src/DevTKSS.Uno.XamlNavigationApp/Models/AppConfig.cs
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Models/Entity.cs b/src/DevTKSS.Uno.XamlNavigationApp/Models/Entity.cs
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Models/Entity.cs
rename to src/DevTKSS.Uno.XamlNavigationApp/Models/Entity.cs
diff --git a/src/DevTKSS.Uno.XamlNavigationApp/Package.appxmanifest b/src/DevTKSS.Uno.XamlNavigationApp/Package.appxmanifest
new file mode 100644
index 0000000..9ef3814
--- /dev/null
+++ b/src/DevTKSS.Uno.XamlNavigationApp/Package.appxmanifest
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Platforms/Desktop/Program.cs b/src/DevTKSS.Uno.XamlNavigationApp/Platforms/Desktop/Program.cs
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Platforms/Desktop/Program.cs
rename to src/DevTKSS.Uno.XamlNavigationApp/Platforms/Desktop/Program.cs
diff --git a/src/DevTKSS.Uno.XamlNavigationApp/Presentation/DashboardModel.cs b/src/DevTKSS.Uno.XamlNavigationApp/Presentation/DashboardModel.cs
new file mode 100644
index 0000000..2088c3f
--- /dev/null
+++ b/src/DevTKSS.Uno.XamlNavigationApp/Presentation/DashboardModel.cs
@@ -0,0 +1,11 @@
+namespace DevTKSS.Uno.XamlNavigationApp.Presentation;
+public partial record DashboardModel
+{
+ public DashboardModel()
+ {
+
+ }
+
+ public IState DashboardTitle => State.Value(this, () => "Hallo vom Dashboard");
+
+}
diff --git a/src/DevTKSS.Uno.XamlNavigationApp/Presentation/DashboardPage.xaml b/src/DevTKSS.Uno.XamlNavigationApp/Presentation/DashboardPage.xaml
new file mode 100644
index 0000000..5eee4c0
--- /dev/null
+++ b/src/DevTKSS.Uno.XamlNavigationApp/Presentation/DashboardPage.xaml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/DashboardPage.xaml.cs b/src/DevTKSS.Uno.XamlNavigationApp/Presentation/DashboardPage.xaml.cs
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/DashboardPage.xaml.cs
rename to src/DevTKSS.Uno.XamlNavigationApp/Presentation/DashboardPage.xaml.cs
diff --git a/src/DevTKSS.Uno.XamlNavigationApp/Presentation/MainModel.cs b/src/DevTKSS.Uno.XamlNavigationApp/Presentation/MainModel.cs
new file mode 100644
index 0000000..8f87572
--- /dev/null
+++ b/src/DevTKSS.Uno.XamlNavigationApp/Presentation/MainModel.cs
@@ -0,0 +1,32 @@
+namespace DevTKSS.Uno.XamlNavigationApp.Presentation;
+
+public partial record MainModel
+{
+ private readonly INavigator _navigator;
+ private readonly IRouteNotifier _routeNotifier;
+
+ public MainModel(
+ INavigator navigator,
+ IRouteNotifier routeNotifier)
+ {
+ _navigator = navigator;
+ _routeNotifier = routeNotifier;
+ _routeNotifier.RouteChanged += Main_OnRouteChanged;
+ }
+
+ private async void Main_OnRouteChanged(object? sender, RouteChangedEventArgs e)
+ {
+ await Title.SetAsync(e.Navigator?.Route?.ToString());
+ }
+
+ public IState Title => State.Value(this, () => _navigator.Route?.ToString() ?? string.Empty);
+
+ public IState Name => State.Value(this, () => string.Empty);
+
+ public async Task GoToSecond()
+ {
+ var name = await Name;
+ await _navigator.NavigateViewModelAsync(this, data: new Entity(name!));
+ }
+
+}
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/MainPage.xaml b/src/DevTKSS.Uno.XamlNavigationApp/Presentation/MainPage.xaml
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/MainPage.xaml
rename to src/DevTKSS.Uno.XamlNavigationApp/Presentation/MainPage.xaml
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/MainPage.xaml.cs b/src/DevTKSS.Uno.XamlNavigationApp/Presentation/MainPage.xaml.cs
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/MainPage.xaml.cs
rename to src/DevTKSS.Uno.XamlNavigationApp/Presentation/MainPage.xaml.cs
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/SecondModel.cs b/src/DevTKSS.Uno.XamlNavigationApp/Presentation/SecondModel.cs
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/SecondModel.cs
rename to src/DevTKSS.Uno.XamlNavigationApp/Presentation/SecondModel.cs
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/SecondPage.xaml b/src/DevTKSS.Uno.XamlNavigationApp/Presentation/SecondPage.xaml
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/SecondPage.xaml
rename to src/DevTKSS.Uno.XamlNavigationApp/Presentation/SecondPage.xaml
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/SecondPage.xaml.cs b/src/DevTKSS.Uno.XamlNavigationApp/Presentation/SecondPage.xaml.cs
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/SecondPage.xaml.cs
rename to src/DevTKSS.Uno.XamlNavigationApp/Presentation/SecondPage.xaml.cs
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/Shell.xaml b/src/DevTKSS.Uno.XamlNavigationApp/Presentation/Shell.xaml
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/Shell.xaml
rename to src/DevTKSS.Uno.XamlNavigationApp/Presentation/Shell.xaml
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/Shell.xaml.cs b/src/DevTKSS.Uno.XamlNavigationApp/Presentation/Shell.xaml.cs
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/Shell.xaml.cs
rename to src/DevTKSS.Uno.XamlNavigationApp/Presentation/Shell.xaml.cs
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/ShellModel.cs b/src/DevTKSS.Uno.XamlNavigationApp/Presentation/ShellModel.cs
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Presentation/ShellModel.cs
rename to src/DevTKSS.Uno.XamlNavigationApp/Presentation/ShellModel.cs
diff --git a/src/DevTKSS.Uno.XamlNavigationApp/Properties/PublishProfiles/win-arm64.pubxml b/src/DevTKSS.Uno.XamlNavigationApp/Properties/PublishProfiles/win-arm64.pubxml
new file mode 100644
index 0000000..5d5632a
--- /dev/null
+++ b/src/DevTKSS.Uno.XamlNavigationApp/Properties/PublishProfiles/win-arm64.pubxml
@@ -0,0 +1,18 @@
+
+
+
+
+ FileSystem
+ arm64
+ win-arm64
+ bin\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\publish\
+ true
+ False
+ False
+ True
+ False
+ True
+
+
diff --git a/src/DevTKSS.Uno.XamlNavigationApp/Properties/PublishProfiles/win-x64.pubxml b/src/DevTKSS.Uno.XamlNavigationApp/Properties/PublishProfiles/win-x64.pubxml
new file mode 100644
index 0000000..12b8344
--- /dev/null
+++ b/src/DevTKSS.Uno.XamlNavigationApp/Properties/PublishProfiles/win-x64.pubxml
@@ -0,0 +1,18 @@
+
+
+
+
+ FileSystem
+ x64
+ win-x64
+ bin\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\publish\
+ true
+ False
+ False
+ True
+ False
+ True
+
+
diff --git a/src/DevTKSS.Uno.XamlNavigationApp/Properties/PublishProfiles/win-x86.pubxml b/src/DevTKSS.Uno.XamlNavigationApp/Properties/PublishProfiles/win-x86.pubxml
new file mode 100644
index 0000000..65b8f1d
--- /dev/null
+++ b/src/DevTKSS.Uno.XamlNavigationApp/Properties/PublishProfiles/win-x86.pubxml
@@ -0,0 +1,23 @@
+
+
+
+
+ FileSystem
+ x86
+ win-x86
+ bin\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\publish\
+ true
+ False
+ False
+ True
+ False
+ True
+
+
+
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Properties/launchSettings.json b/src/DevTKSS.Uno.XamlNavigationApp/Properties/launchSettings.json
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Properties/launchSettings.json
rename to src/DevTKSS.Uno.XamlNavigationApp/Properties/launchSettings.json
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/ReadMe.de.md b/src/DevTKSS.Uno.XamlNavigationApp/ReadMe.de.md
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/ReadMe.de.md
rename to src/DevTKSS.Uno.XamlNavigationApp/ReadMe.de.md
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/ReadMe.en.md b/src/DevTKSS.Uno.XamlNavigationApp/ReadMe.en.md
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/ReadMe.en.md
rename to src/DevTKSS.Uno.XamlNavigationApp/ReadMe.en.md
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Services/Endpoints/DebugHandler.cs b/src/DevTKSS.Uno.XamlNavigationApp/Services/Endpoints/DebugHandler.cs
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Services/Endpoints/DebugHandler.cs
rename to src/DevTKSS.Uno.XamlNavigationApp/Services/Endpoints/DebugHandler.cs
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Strings/en/Resources.resw b/src/DevTKSS.Uno.XamlNavigationApp/Strings/en/Resources.resw
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Strings/en/Resources.resw
rename to src/DevTKSS.Uno.XamlNavigationApp/Strings/en/Resources.resw
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Strings/es/Resources.resw b/src/DevTKSS.Uno.XamlNavigationApp/Strings/es/Resources.resw
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Strings/es/Resources.resw
rename to src/DevTKSS.Uno.XamlNavigationApp/Strings/es/Resources.resw
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Strings/fr/Resources.resw b/src/DevTKSS.Uno.XamlNavigationApp/Strings/fr/Resources.resw
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Strings/fr/Resources.resw
rename to src/DevTKSS.Uno.XamlNavigationApp/Strings/fr/Resources.resw
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/Strings/pt-BR/Resources.resw b/src/DevTKSS.Uno.XamlNavigationApp/Strings/pt-BR/Resources.resw
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/Strings/pt-BR/Resources.resw
rename to src/DevTKSS.Uno.XamlNavigationApp/Strings/pt-BR/Resources.resw
diff --git a/src/DevTKSS.Uno.XamlNavigationApp/Styles/ColorPaletteOverride.json b/src/DevTKSS.Uno.XamlNavigationApp/Styles/ColorPaletteOverride.json
new file mode 100644
index 0000000..cd15492
--- /dev/null
+++ b/src/DevTKSS.Uno.XamlNavigationApp/Styles/ColorPaletteOverride.json
@@ -0,0 +1,76 @@
+{
+ "description": "Default Uno Material colors",
+ "seed": "#5946d2",
+ "coreColors": {
+ "primary": "#5946d2",
+ "secondary": "#6b4ea2"
+ },
+ "extendedColors": [],
+ "schemes": {
+ "light": {
+ "primary": "#5946d2",
+ "surfaceTint": "#5946d2",
+ "onPrimary": "#ffffff",
+ "primaryContainer": "#e5deff",
+ "onPrimaryContainer": "#170065",
+ "secondary": "#6b4ea2",
+ "onSecondary": "#ffffff",
+ "secondaryContainer": "#ebddff",
+ "onSecondaryContainer": "#220555",
+ "tertiary": "#0061a4",
+ "onTertiary": "#ffffff",
+ "tertiaryContainer": "#cfe4ff",
+ "onTertiaryContainer": "#001d36",
+ "error": "#b3261e",
+ "onError": "#ffffff",
+ "errorContainer": "#f9dedc",
+ "onErrorContainer": "#410e0b",
+ "background": "#fcfbff",
+ "onBackground": "#1c1b1f",
+ "surface": "#ffffff",
+ "onSurface": "#1c1b1f",
+ "surfaceVariant": "#f2eff5",
+ "onSurfaceVariant": "#8b8494",
+ "outline": "#79747e",
+ "outlineVariant": "#c9c5d0",
+ "shadow": "#000000",
+ "scrim": "#000000",
+ "inverseSurface": "#e6e1e5",
+ "inverseOnSurface": "#1c1b1f",
+ "inversePrimary": "#2a009f"
+ },
+ "dark": {
+ "primary": "#c7bfff",
+ "surfaceTint": "#c7bfff",
+ "onPrimary": "#2a009f",
+ "primaryContainer": "#4129ba",
+ "onPrimaryContainer": "#e4dfff",
+ "secondary": "#cdc2dc",
+ "onSecondary": "#332d41",
+ "secondaryContainer": "#433c52",
+ "onSecondaryContainer": "#eddfff",
+ "tertiary": "#9fcaff",
+ "onTertiary": "#003258",
+ "tertiaryContainer": "#00497d",
+ "onTertiaryContainer": "#d1e4ff",
+ "error": "#ffb4ab",
+ "onError": "#690005",
+ "errorContainer": "#93000a",
+ "onErrorContainer": "#ffdad6",
+ "background": "#1c1b1f",
+ "onBackground": "#e5e1e6",
+ "surface": "#302d37",
+ "onSurface": "#e6e1e5",
+ "surfaceVariant": "#47464f",
+ "onSurfaceVariant": "#c9c5d0",
+ "outline": "#928f99",
+ "outlineVariant": "#57545d",
+ "shadow": "#000000",
+ "scrim": "#000000",
+ "inverseSurface": "#e6e1e5",
+ "inverseOnSurface": "#1c1b1f",
+ "inversePrimary": "#2a009f"
+ }
+ },
+ "palettes": {}
+}
diff --git a/src/DevTKSS.Uno.XamlNavigationApp/Styles/ColorPaletteOverride.xaml b/src/DevTKSS.Uno.XamlNavigationApp/Styles/ColorPaletteOverride.xaml
new file mode 100644
index 0000000..b47f330
--- /dev/null
+++ b/src/DevTKSS.Uno.XamlNavigationApp/Styles/ColorPaletteOverride.xaml
@@ -0,0 +1,65 @@
+
+
+
+
+ #5946D2
+ #FFFFFF
+ #E5DEFF
+ #170065
+ #6B4EA2
+ #FFFFFF
+ #EBDDFF
+ #220555
+ #0061A4
+ #FFFFFF
+ #CFE4FF
+ #001D36
+ #B3261E
+ #F9DEDC
+ #FFFFFF
+ #410E0B
+ #FCFBFF
+ #1C1B1F
+ #FFFFFF
+ #1C1B1F
+ #F2EFF5
+ #8B8494
+ #79747E
+ #F4EFF4
+ #313033
+ #C8BFFF
+ #5946D2
+ #C9C5D0
+
+
+ #C7BFFF
+ #2A009F
+ #4129BA
+ #E4DFFF
+ #CDC2DC
+ #332D41
+ #433C52
+ #EDDFFF
+ #9FCAFF
+ #003258
+ #00497D
+ #D1E4FF
+ #FFB4AB
+ #93000A
+ #690005
+ #FFDAD6
+ #1C1B1F
+ #E5E1E6
+ #302D37
+ #E6E1E5
+ #47464F
+ #C9C5D0
+ #928F99
+ #1C1B1F
+ #E6E1E5
+ #2A009F
+ #C7BFFF
+ #57545D
+
+
+
diff --git a/src/DevTKSS.Uno.XamlNavigationApp-1/app.manifest b/src/DevTKSS.Uno.XamlNavigationApp/app.manifest
similarity index 100%
rename from src/DevTKSS.Uno.XamlNavigationApp-1/app.manifest
rename to src/DevTKSS.Uno.XamlNavigationApp/app.manifest
diff --git a/src/DevTKSS.Uno.XamlNavigationApp/appsettings.development.json b/src/DevTKSS.Uno.XamlNavigationApp/appsettings.development.json
new file mode 100644
index 0000000..31a70b7
--- /dev/null
+++ b/src/DevTKSS.Uno.XamlNavigationApp/appsettings.development.json
@@ -0,0 +1,5 @@
+{
+ "AppConfig": {
+ "Environment": "Development"
+ }
+}
diff --git a/src/DevTKSS.Uno.XamlNavigationApp/appsettings.json b/src/DevTKSS.Uno.XamlNavigationApp/appsettings.json
new file mode 100644
index 0000000..187e4d5
--- /dev/null
+++ b/src/DevTKSS.Uno.XamlNavigationApp/appsettings.json
@@ -0,0 +1,13 @@
+{
+ "AppConfig": {
+ "Environment": "Production"
+ },
+ "LocalizationConfiguration": {
+ "Cultures": [
+ "es",
+ "fr",
+ "pt-BR",
+ "en"
+ ]
+ }
+}