From 286960429bef530d2731de40d049703e1b1675c0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 08:26:26 +0000 Subject: [PATCH 001/597] Bump Microsoft.Extensions.DependencyInjection and Microsoft.NETFramework.ReferenceAssemblies Bumps [Microsoft.Extensions.DependencyInjection](https://github.com/dotnet/runtime) and [Microsoft.NETFramework.ReferenceAssemblies](https://github.com/Microsoft/dotnet). These dependencies needed to be updated together. Updates `Microsoft.Extensions.DependencyInjection` from 9.0.1 to 9.0.3 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.1...v9.0.3) Updates `Microsoft.NETFramework.ReferenceAssemblies` from 1.0.3 to 1.0.3 - [Commits](https://github.com/Microsoft/dotnet/commits) --- updated-dependencies: - dependency-name: Microsoft.Extensions.DependencyInjection dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.NETFramework.ReferenceAssemblies dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- TestStatements/AppWithPlugin/AppWithPlugin.csproj | 2 +- TestStatements/TestStatements/TestStatements.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/TestStatements/AppWithPlugin/AppWithPlugin.csproj b/TestStatements/AppWithPlugin/AppWithPlugin.csproj index e3444f15a..01ee4c7fa 100644 --- a/TestStatements/AppWithPlugin/AppWithPlugin.csproj +++ b/TestStatements/AppWithPlugin/AppWithPlugin.csproj @@ -13,7 +13,7 @@ - + diff --git a/TestStatements/TestStatements/TestStatements.csproj b/TestStatements/TestStatements/TestStatements.csproj index 5f3e2b84e..906e9d906 100644 --- a/TestStatements/TestStatements/TestStatements.csproj +++ b/TestStatements/TestStatements/TestStatements.csproj @@ -58,7 +58,7 @@ - + From 989c54696059d181a60d08a2838eeef3a051995b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Aug 2025 15:49:02 +0000 Subject: [PATCH 002/597] Bump MSTest to 3.10.1 --- updated-dependencies: - dependency-name: MSTest dependency-version: 3.10.1 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: MSTest dependency-version: 3.10.1 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: MSTest dependency-version: 3.10.1 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: MSTest dependency-version: 3.10.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- TestStatements/HelloPluginTest/HelloPluginTest.csproj | 2 +- TestStatements/TestGJKAlgTest/TestGJKAlgTest.csproj | 2 +- TestStatements/TestStatementsTest/TestStatementsTest.csproj | 2 +- TestStatements/TestStatementsTest/TestStatements_netTest.csproj | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/TestStatements/HelloPluginTest/HelloPluginTest.csproj b/TestStatements/HelloPluginTest/HelloPluginTest.csproj index d6ba8858d..05903c112 100644 --- a/TestStatements/HelloPluginTest/HelloPluginTest.csproj +++ b/TestStatements/HelloPluginTest/HelloPluginTest.csproj @@ -14,7 +14,7 @@ - + diff --git a/TestStatements/TestGJKAlgTest/TestGJKAlgTest.csproj b/TestStatements/TestGJKAlgTest/TestGJKAlgTest.csproj index 14c4a0da8..75d94c22c 100644 --- a/TestStatements/TestGJKAlgTest/TestGJKAlgTest.csproj +++ b/TestStatements/TestGJKAlgTest/TestGJKAlgTest.csproj @@ -9,7 +9,7 @@ - + diff --git a/TestStatements/TestStatementsTest/TestStatementsTest.csproj b/TestStatements/TestStatementsTest/TestStatementsTest.csproj index 582cc18bb..605e85473 100644 --- a/TestStatements/TestStatementsTest/TestStatementsTest.csproj +++ b/TestStatements/TestStatementsTest/TestStatementsTest.csproj @@ -32,7 +32,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/TestStatements/TestStatementsTest/TestStatements_netTest.csproj b/TestStatements/TestStatementsTest/TestStatements_netTest.csproj index 6b8897115..6043659fc 100644 --- a/TestStatements/TestStatementsTest/TestStatements_netTest.csproj +++ b/TestStatements/TestStatementsTest/TestStatements_netTest.csproj @@ -33,7 +33,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From b32ee181f9c542f1155b6bb75342c800cefaf1f5 Mon Sep 17 00:00:00 2001 From: "Rosewich, Christian" Date: Mon, 10 Nov 2025 10:00:17 +0100 Subject: [PATCH 003/597] =?UTF-8?q?Aktualisiere=20TargetFrameworks=20mit?= =?UTF-8?q?=20bedingten=20Bl=C3=B6cken?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Entferne `net9.0` und `net10.0` aus den ursprünglichen `TargetFrameworks`-Listen in mehreren Projekten. Füge bedingte `PropertyGroup`-Blöcke hinzu, um `net9.0` und `net10.0` basierend auf der .NET Core SDK-Version (`9.0.100` bzw. `10.0.100`) dynamisch hinzuzufügen. Korrigiere Einrückungen und formatiere `AssemblyOriginatorKeyFile` in `BaseLib.csproj`. Stelle `ProjectReference`-Einträge in `TranspilerLib.Pascal.csproj` wieder her. Behalte Dokumentationseinstellungen für `net9.0` in `TranspilerLib.csproj` bei. --- CSharpBible/Libraries/BaseLib/BaseLib.csproj | 14 +++++++++---- .../BaseLibTests/BaseLibTests.csproj | 8 +++++++- .../TranspilerLib.CSharp.csproj | 8 +++++++- .../TranspilerLib.Pascal.csproj | 20 +++++++++++++------ .../TranspilerLib/TranspilerLib.csproj | 8 +++++++- 5 files changed, 45 insertions(+), 13 deletions(-) diff --git a/CSharpBible/Libraries/BaseLib/BaseLib.csproj b/CSharpBible/Libraries/BaseLib/BaseLib.csproj index 4f9be44f9..a3feeac5c 100644 --- a/CSharpBible/Libraries/BaseLib/BaseLib.csproj +++ b/CSharpBible/Libraries/BaseLib/BaseLib.csproj @@ -2,17 +2,23 @@ Library - net6.0;net7.0;net8.0;net9.0;net481;net48;net472;net462 + net6.0;net7.0;net8.0;net481;net48;net472;net462 + + $(TargetFrameworks);net9.0 + + + $(TargetFrameworks);net10.0 + False 4772c317-55ff-4251-b766-1c41dfb672e5 True False - ..\sgLib.snk - + ..\sgLib.snk + @@ -23,7 +29,7 @@ - + \ No newline at end of file diff --git a/CSharpBible/Libraries/BaseLibTests/BaseLibTests.csproj b/CSharpBible/Libraries/BaseLibTests/BaseLibTests.csproj index dde0c2806..0c9179639 100644 --- a/CSharpBible/Libraries/BaseLibTests/BaseLibTests.csproj +++ b/CSharpBible/Libraries/BaseLibTests/BaseLibTests.csproj @@ -1,11 +1,17 @@  - net8.0;net9.0;net10.0;net481;net48;net472;net462 + net8.0;net481;net48;net472;net462 false + + $(TargetFrameworks);net9.0 + + + $(TargetFrameworks);net10.0 + diff --git a/Transpiler_pp/TranspilerLib.CSharp/TranspilerLib.CSharp.csproj b/Transpiler_pp/TranspilerLib.CSharp/TranspilerLib.CSharp.csproj index e0d715e5a..2d7da566e 100644 --- a/Transpiler_pp/TranspilerLib.CSharp/TranspilerLib.CSharp.csproj +++ b/Transpiler_pp/TranspilerLib.CSharp/TranspilerLib.CSharp.csproj @@ -1,11 +1,17 @@  - net8.0;net9.0;net10.0 + net8.0 enable + + $(TargetFrameworks);net9.0 + + + $(TargetFrameworks);net10.0 + diff --git a/Transpiler_pp/TranspilerLib.Pascal/TranspilerLib.Pascal.csproj b/Transpiler_pp/TranspilerLib.Pascal/TranspilerLib.Pascal.csproj index 2643e0b91..85b14c592 100644 --- a/Transpiler_pp/TranspilerLib.Pascal/TranspilerLib.Pascal.csproj +++ b/Transpiler_pp/TranspilerLib.Pascal/TranspilerLib.Pascal.csproj @@ -1,13 +1,21 @@  + - net8.0;net9.0;net10.0 - enable - - - - + + net8.0 + enable + + + $(TargetFrameworks);net9.0 + + + $(TargetFrameworks);net10.0 + + + + diff --git a/Transpiler_pp/TranspilerLib/TranspilerLib.csproj b/Transpiler_pp/TranspilerLib/TranspilerLib.csproj index 5e473fef6..91352c03f 100644 --- a/Transpiler_pp/TranspilerLib/TranspilerLib.csproj +++ b/Transpiler_pp/TranspilerLib/TranspilerLib.csproj @@ -1,7 +1,7 @@  - net8.0;net9.0;net10.0 + net8.0 enable @@ -10,6 +10,12 @@ + + $(TargetFrameworks);net9.0 + + + $(TargetFrameworks);net10.0 + From 7aa92624a69cdca45c0698f94e59d583516a2faf Mon Sep 17 00:00:00 2001 From: "Rosewich, Christian" Date: Mon, 10 Nov 2025 10:03:13 +0100 Subject: [PATCH 004/597] Dynamische Ziel-Frameworks basierend auf SDK-Version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Standardkonfiguration wurde angepasst, um nur `net8.0` als Ziel-Framework zu verwenden. Neue ``-Blöcke fügen `net9.0` und `net10.0` dynamisch hinzu, wenn die SDK-Version `9.0.100` bzw. `10.0.100` oder höher ist. Die Einstellung `enable` bleibt unverändert. Bestehende ``-Anweisungen für `Sdk.props` und `Sdk.targets` wurden beibehalten. --- Transpiler_pp/TranspilerLib.IEC/TranspilerLib.IEC.csproj | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Transpiler_pp/TranspilerLib.IEC/TranspilerLib.IEC.csproj b/Transpiler_pp/TranspilerLib.IEC/TranspilerLib.IEC.csproj index 4abf8347e..1ed73ae31 100644 --- a/Transpiler_pp/TranspilerLib.IEC/TranspilerLib.IEC.csproj +++ b/Transpiler_pp/TranspilerLib.IEC/TranspilerLib.IEC.csproj @@ -1,11 +1,17 @@  - net8.0;net9.0;net10.0 + net8.0 enable + + $(TargetFrameworks);net9.0 + + + $(TargetFrameworks);net10.0 + From 6fc66c678924ca79cb83c2d0931881550780dcbd Mon Sep 17 00:00:00 2001 From: "Rosewich, Christian" Date: Mon, 10 Nov 2025 11:23:32 +0100 Subject: [PATCH 005/597] =?UTF-8?q?Refaktorierung:=20Einf=C3=BChrung=20von?= =?UTF-8?q?=20Interfaces=20und=20DI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Codebasis wurde umfassend refaktoriert, um eine lose Kopplung und bessere Erweiterbarkeit zu ermöglichen. Wichtige Änderungen umfassen: - Einführung neuer Interfaces (`IDivision`, `ILeague`, `IPlace`, `ITeam`) und deren Implementierung in den entsprechenden Klassen. - Anpassung der Klassen `Division`, `League`, `Place`, `Team` und `Places`, um die neuen Interfaces zu nutzen. - Überarbeitung von `ListLeagueList`, um C# 12 Collection Expressions zu verwenden. - Aktualisierung des Projekts auf moderne .NET SDK-Standards. - Hinzufügen eines Dependency Injection (DI)-Containers mit `Microsoft.Extensions.Hosting` und `Microsoft.Extensions.DependencyInjection`. - Einführung eines neuen ViewModels (`MainWindowViewModel`) mit `CommunityToolkit.Mvvm`. - Entfernen veralteter Assembly-Informationen und Konfigurationen. Diese Änderungen verbessern die Wartbarkeit, Testbarkeit und Modularität der Anwendung. --- .../Models/Division.cs | 7 +- .../Models/Interfaces/IDivision.cs | 9 ++ .../Models/Interfaces/ILeague.cs | 9 ++ .../Models/Interfaces/IPlace.cs | 7 + .../Models/Interfaces/ITeam.cs | 6 + .../Models/League.cs | 7 +- .../Models/ListLeagueList.cs | 135 ++++++++++++------ .../Models/Place.cs | 8 +- .../Models/Places.cs | 8 +- .../Models/Team.cs | 4 +- .../Properties/AssemblyInfo.cs | 8 -- .../WPF_AlternatingAppearanceOfItems.csproj | 74 +--------- .../WPF_ContentControlStyle/App.Startup.cs | 44 ++++++ .../ViewModels/MainWindowViewModel.cs | 20 +++ .../WPF_ContentControlStyle.csproj | 7 + 15 files changed, 212 insertions(+), 141 deletions(-) create mode 100644 CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Interfaces/IDivision.cs create mode 100644 CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Interfaces/ILeague.cs create mode 100644 CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Interfaces/IPlace.cs create mode 100644 CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Interfaces/ITeam.cs create mode 100644 CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_ContentControlStyle/App.Startup.cs create mode 100644 CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_ContentControlStyle/ViewModels/MainWindowViewModel.cs diff --git a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Division.cs b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Division.cs index 19f60d29b..ec832f505 100644 --- a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Division.cs +++ b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Division.cs @@ -2,17 +2,18 @@ // // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.Collections.Generic; +using AlternatingAppearanceOfItems.Models.Interfaces; namespace AlternatingAppearanceOfItems.Models; -public class Division +public class Division : IDivision { public Division(string name) { Name = name; - Teams = new List(); + Teams = new List(); } public string Name { get; } - public List Teams { get; } + public List Teams { get; } } \ No newline at end of file diff --git a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Interfaces/IDivision.cs b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Interfaces/IDivision.cs new file mode 100644 index 000000000..ccf6afd55 --- /dev/null +++ b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Interfaces/IDivision.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace AlternatingAppearanceOfItems.Models.Interfaces; + +public interface IDivision +{ + string Name { get; } + List Teams { get; } +} diff --git a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Interfaces/ILeague.cs b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Interfaces/ILeague.cs new file mode 100644 index 000000000..ef2aa6450 --- /dev/null +++ b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Interfaces/ILeague.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace AlternatingAppearanceOfItems.Models.Interfaces; + +public interface ILeague +{ + string Name { get; } + List Divisions { get; } +} diff --git a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Interfaces/IPlace.cs b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Interfaces/IPlace.cs new file mode 100644 index 000000000..fd03908b6 --- /dev/null +++ b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Interfaces/IPlace.cs @@ -0,0 +1,7 @@ +namespace AlternatingAppearanceOfItems.Models.Interfaces; + +public interface IPlace +{ + string CityName { get; set; } + string State { get; set; } +} diff --git a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Interfaces/ITeam.cs b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Interfaces/ITeam.cs new file mode 100644 index 000000000..5db119808 --- /dev/null +++ b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Interfaces/ITeam.cs @@ -0,0 +1,6 @@ +namespace AlternatingAppearanceOfItems.Models.Interfaces; + +public interface ITeam +{ + string Name { get; } +} diff --git a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/League.cs b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/League.cs index 10afd506e..48ef37462 100644 --- a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/League.cs +++ b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/League.cs @@ -2,17 +2,18 @@ // // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.Collections.Generic; +using AlternatingAppearanceOfItems.Models.Interfaces; namespace AlternatingAppearanceOfItems.Models; -public class League +public class League : ILeague { public League(string name) { Name = name; - Divisions = new List(); + Divisions = new List(); } public string Name { get; } - public List Divisions { get; } + public List Divisions { get; } } \ No newline at end of file diff --git a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/ListLeagueList.cs b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/ListLeagueList.cs index 69a271358..27fba8c66 100644 --- a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/ListLeagueList.cs +++ b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/ListLeagueList.cs @@ -1,52 +1,93 @@ -// // Copyright (c) Microsoft. All rights reserved. -// // Licensed under the MIT license. See LICENSE file in the project root for full license information. - using System.Collections.Generic; +using AlternatingAppearanceOfItems.Models.Interfaces; namespace AlternatingAppearanceOfItems.Models; -public class ListLeagueList : List -{ - public ListLeagueList() - { - League l; - Division d; +// Pseudocode: +// - Verwende C# 12 Collection Expressions, um die List-Basisliste direkt im Konstruktor zu befllen. +// - Nutze base([...]) fr bergabe an List-Konstruktor. +// - Fr verschachtelte Listen (Divisions, Teams) Collection-/Objektinitialisierer mit Divisions = { ... } und Teams = { ... } (kein Setter ntig). +// - Ersetze alle Add-Aufrufe durch deklarative Initialisierung. - Add(l = new League("League A")); - l.Divisions.Add(d = new Division("Division A")); - d.Teams.Add(new Team("Team I")); - d.Teams.Add(new Team("Team II")); - d.Teams.Add(new Team("Team III")); - d.Teams.Add(new Team("Team IV")); - d.Teams.Add(new Team("Team V")); - l.Divisions.Add(d = new Division("Division B")); - d.Teams.Add(new Team("Team Blue")); - d.Teams.Add(new Team("Team Red")); - d.Teams.Add(new Team("Team Yellow")); - d.Teams.Add(new Team("Team Green")); - d.Teams.Add(new Team("Team Orange")); - l.Divisions.Add(d = new Division("Division C")); - d.Teams.Add(new Team("Team East")); - d.Teams.Add(new Team("Team West")); - d.Teams.Add(new Team("Team North")); - d.Teams.Add(new Team("Team South")); - Add(l = new League("League B")); - l.Divisions.Add(d = new Division("Division A")); - d.Teams.Add(new Team("Team 1")); - d.Teams.Add(new Team("Team 2")); - d.Teams.Add(new Team("Team 3")); - d.Teams.Add(new Team("Team 4")); - d.Teams.Add(new Team("Team 5")); - l.Divisions.Add(d = new Division("Division B")); - d.Teams.Add(new Team("Team Diamond")); - d.Teams.Add(new Team("Team Heart")); - d.Teams.Add(new Team("Team Club")); - d.Teams.Add(new Team("Team Spade")); - l.Divisions.Add(d = new Division("Division C")); - d.Teams.Add(new Team("Team Alpha")); - d.Teams.Add(new Team("Team Beta")); - d.Teams.Add(new Team("Team Gamma")); - d.Teams.Add(new Team("Team Delta")); - d.Teams.Add(new Team("Team Epsilon")); - } -} \ No newline at end of file +public class ListLeagueList : List +{ + public ListLeagueList() : base([ + new League("League A") + { + Divisions = + { + new Division("Division A") + { + Teams = + { + new Team("Team I"), + new Team("Team II"), + new Team("Team III"), + new Team("Team IV"), + new Team("Team V") + } + }, + new Division("Division B") + { + Teams = + { + new Team("Team Blue"), + new Team("Team Red"), + new Team("Team Yellow"), + new Team("Team Green"), + new Team("Team Orange") + } + }, + new Division("Division C") + { + Teams = + { + new Team("Team East"), + new Team("Team West"), + new Team("Team North"), + new Team("Team South") + } + } + } + }, + new League("League B") + { + Divisions = + { + new Division("Division A") + { + Teams = + { + new Team("Team1"), + new Team("Team2"), + new Team("Team3"), + new Team("Team4"), + new Team("Team5") + } + }, + new Division("Division B") + { + Teams = + { + new Team("Team Diamond"), + new Team("Team Heart"), + new Team("Team Club"), + new Team("Team Spade") + } + }, + new Division("Division C") + { + Teams = + { + new Team("Team Alpha"), + new Team("Team Beta"), + new Team("Team Gamma"), + new Team("Team Delta"), + new Team("Team Epsilon") + } + } + } + } + ]) + { } +} diff --git a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Place.cs b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Place.cs index 8fa038d94..ad7dba912 100644 --- a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Place.cs +++ b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Place.cs @@ -1,14 +1,16 @@ // // Copyright (c) Microsoft. All rights reserved. // // Licensed under the MIT license. See LICENSE file in the project root for full license information. +using AlternatingAppearanceOfItems.Models.Interfaces; + namespace AlternatingAppearanceOfItems.Models; -public class Place +public class Place : IPlace { public Place() { - CityName = ""; - State = ""; + CityName = string.Empty; + State = string.Empty; } public Place(string name, string state) diff --git a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Places.cs b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Places.cs index 7213f9afd..1cb9fea0b 100644 --- a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Places.cs +++ b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Places.cs @@ -1,11 +1,9 @@ -// // Copyright (c) Microsoft. All rights reserved. -// // Licensed under the MIT license. See LICENSE file in the project root for full license information. - using System.Collections.ObjectModel; +using AlternatingAppearanceOfItems.Models.Interfaces; namespace AlternatingAppearanceOfItems.Models; -public class Places : ObservableCollection +public class Places : ObservableCollection { public Places() { @@ -23,4 +21,4 @@ public Places() Add(new Place("Tacoma", "WA")); Add(new Place("Albany", "OR")); } -} \ No newline at end of file +} diff --git a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Team.cs b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Team.cs index 756a14b4d..56d6c3a79 100644 --- a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Team.cs +++ b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Models/Team.cs @@ -1,9 +1,11 @@ // // Copyright (c) Microsoft. All rights reserved. // // Licensed under the MIT license. See LICENSE file in the project root for full license information. +using AlternatingAppearanceOfItems.Models.Interfaces; + namespace AlternatingAppearanceOfItems.Models; -public class Team +public class Team : ITeam { public Team(string name) { diff --git a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Properties/AssemblyInfo.cs b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Properties/AssemblyInfo.cs index 8f344c29a..345d3f3bf 100644 --- a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Properties/AssemblyInfo.cs +++ b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/Properties/AssemblyInfo.cs @@ -9,12 +9,7 @@ // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("AlternatingAppearanceOfItems")] [assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("AlternatingAppearanceOfItems")] -[assembly: AssemblyCopyright("Copyright © 2015")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -54,6 +49,3 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] - -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/WPF_AlternatingAppearanceOfItems.csproj b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/WPF_AlternatingAppearanceOfItems.csproj index 58dc4e50a..d93010bfc 100644 --- a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/WPF_AlternatingAppearanceOfItems.csproj +++ b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_AlternatingAppearanceOfItems/WPF_AlternatingAppearanceOfItems.csproj @@ -1,80 +1,12 @@ - + + WinExe net462;net472;net48;net481 true - false AnyCPU;x64 + Properties - - Debug - AnyCPU - {46D66569-3E63-470C-9469-289B5A0D12D4} - WinExe - Properties - true - - - ARM64 - true - portable - false - - - - MSBuild:Compile - Designer - - - - - MSBuild:Compile - Designer - - - App.xaml - Code - - - - - MainWindow.xaml - Code - - - - - - - True - True - Resources.resx - - - True - Settings.settings - True - - - ResXFileCodeGenerator - Resources.Designer.cs - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - - - - - diff --git a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_ContentControlStyle/App.Startup.cs b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_ContentControlStyle/App.Startup.cs new file mode 100644 index 000000000..3385a7bca --- /dev/null +++ b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_ContentControlStyle/App.Startup.cs @@ -0,0 +1,44 @@ +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.DependencyInjection; +using System.Threading.Tasks; +using System.Windows; +using ContentControlStyle.ViewModels; +using ContentControlStyle.Views; + +namespace ContentControlStyle; + +public partial class App +{ + private IHost? _host; + + private void ConfigureHost() + { + _host = Host.CreateDefaultBuilder() + .ConfigureServices(services => + { + services.AddSingleton(); + services.AddTransient(); + }) + .Build(); + } + + protected override void OnStartup(StartupEventArgs e) + { + ConfigureHost(); + _host!.Start(); + var window = _host.Services.GetRequiredService(); + window.DataContext = _host.Services.GetRequiredService(); + window.Show(); + base.OnStartup(e); + } + + protected override async void OnExit(ExitEventArgs e) + { + if (_host != null) + { + await _host.StopAsync(); + _host.Dispose(); + } + base.OnExit(e); + } +} diff --git a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_ContentControlStyle/ViewModels/MainWindowViewModel.cs b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_ContentControlStyle/ViewModels/MainWindowViewModel.cs new file mode 100644 index 000000000..cdc0d1a86 --- /dev/null +++ b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_ContentControlStyle/ViewModels/MainWindowViewModel.cs @@ -0,0 +1,20 @@ +using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.Input; +using System.Windows; + +namespace ContentControlStyle.ViewModels; + +public partial class MainWindowViewModel : ObservableObject +{ + [ObservableProperty] + private string contentText = "This is the content of the content control."; + + [RelayCommand] + private void CheckContent() + { + if (!string.IsNullOrWhiteSpace(ContentText)) + { + MessageBox.Show("ViewModel reports content present."); + } + } +} diff --git a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_ContentControlStyle/WPF_ContentControlStyle.csproj b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_ContentControlStyle/WPF_ContentControlStyle.csproj index 77c95a5c0..6b86e435c 100644 --- a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_ContentControlStyle/WPF_ContentControlStyle.csproj +++ b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_ContentControlStyle/WPF_ContentControlStyle.csproj @@ -23,6 +23,8 @@ App.xaml Code + + MainWindow.xaml Code @@ -52,6 +54,11 @@ + + + + + + + '=' (single assign) + + + '>' + + + '[' + + + ']' + + + '^' (xor operator) + + + '\' + + + + '|' + + + '!' + + + '?' + + + '%' + + + '~' + + + '==' equality operator. + + + '=>' lambda operator. + + + '..' range / spread operator. + + + '!=' not equal operator. + + + + + '**' power operator. + + + + '??' null-coalescing operator. + + + '++' increment operator. + + + '--' decrement operator. + + + '+=' addition assignment. + + + '-=' subtraction assignment. + + + '*=' multiplication assignment. + + + '/=' division assignment. + + + '%=' modulo assignment. + + + + '|=' bitwise or assignment. + + + '^=' bitwise xor assignment. + + + + '||' logical or operator. + + + + '>>' shift-right operator. + + + + + '??=' null-coalescing assignment. + + + 'abstract' keyword. + + + 'as' keyword. + + + 'base' keyword. + + + 'bool' keyword. + + + 'break' keyword. + + + 'byte' keyword. + + + 'case' keyword. + + + 'catch' keyword. + + + 'char' keyword. + + + 'checked' keyword. + + + 'class' keyword. + + + 'const' keyword. + + + 'continue' keyword. + + + 'decimal' keyword. + + + 'default' keyword. + + + 'delegate' keyword. + + + 'do' keyword. + + + 'double' keyword. + + + 'else' keyword. + + + 'enum' keyword. + + + 'event' keyword. + + + 'explicit' keyword. + + + 'extern' keyword. + + + 'false' literal. + + + 'finally' keyword. + + + 'fixed' keyword. + + + 'float' keyword. + + + 'for' keyword. + + + 'foreach' keyword. + + + 'goto' keyword. + + + 'if' keyword. + + + 'implicit' keyword. + + + 'in' keyword. + + + 'int' keyword. + + + 'interface' keyword. + + + 'internal' keyword. + + + 'is' keyword. + + + 'lock' keyword. + + + 'long' keyword. + + + 'namespace' keyword. + + + 'new' keyword. + + + 'null' literal. + + + 'object' keyword. + + + 'operator' keyword. + + + 'out' keyword. + + + 'override' keyword. + + + 'params' keyword. + + + 'private' keyword. + + + 'protected' keyword. + + + 'public' keyword. + + + 'readonly' keyword. + + + 'ref' keyword. + + + 'return' keyword. + + + 'sbyte' keyword. + + + 'sealed' keyword. + + + 'short' keyword. + + + 'sizeof' keyword. + + + 'stackalloc' keyword. + + + 'static' keyword. + + + 'string' keyword. + + + 'struct' keyword. + + + 'switch' keyword. + + + 'this' keyword. + + + 'throw' keyword. + + + 'true' literal. + + + 'try' keyword. + + + 'typeof' keyword. + + + 'uint' keyword. + + + 'ulong' keyword. + + + 'unchecked' keyword. + + + 'unsafe' keyword. + + + 'ushort' keyword. + + + 'using' keyword. + + + 'virtual' keyword. + + + 'void' keyword. + + + 'volatile' keyword. + + + 'while' keyword. + Laufzeitdaten für den Interpreter (Program Counter und ggf. weitere Statusinformationen in Zukunft). @@ -586,167 +988,263 @@ - Class CodeBlock. - Implements the + Represents a hierarchical unit of parsed source code. + A CodeBlock can contain nested sub blocks forming a tree structure + (e.g. namespaces, classes, methods, statements, labels, etc.). + It also supports weak references to control-flow destinations and sources + (e.g. for Goto/Label relationships) without preventing garbage collection. - + + Main responsibilities: + 1. Maintain parent/child relationships among code blocks. + 2. Track positional metadata () and structural metadata (, ). + 3. Represent semantic type information via . + 4. Manage directed weak links for flow navigation ( and ). + 5. Provide helper operations to move or delete sub blocks while keeping references consistent. + 6. Support serialization of destination/source references through index paths (, ). + - The parent + Backing field for . - Gets the level. + Gets the depth level of this block within the root code tree. + Root level is 0; each nested level increments by 1. - The level. + Zero-based depth level. - Gets the index. + Gets the zero-based index of this block among its siblings in 's list. + Returns 0 if this block has no parent. - The index. + The sibling index or 0 if no parent. - Gets or sets the name. + Gets or sets the logical name of this code block (e.g. identifier, label, method name). + May be empty if not applicable for the . - The name. + Human readable or identifier name. - Gets or sets the code. + Gets or sets the raw code text fragment represented by this block. + This is typically the original token(s) or reconstructed code for output. - The code. + Source code fragment. - Gets or sets the type. + Gets or sets the semantic classification for this block. + Used to distinguish structural, declarative, and operational elements. - The type. + A value of . - Gets the sub blocks. + Gets the list of child code blocks nested inside this block. + Children maintain their own parent reference automatically. - The sub blocks. + Mutable list of sub blocks. - Gets the next. + Gets the next sibling block under the same parent, if any. - The next. + Next sibling or null. - Gets the previous. + Gets the previous sibling block under the same parent, if any. - The previous. + Previous sibling or null. - Gets or sets the destination. + Gets or sets the weak reference to a destination block (e.g. target of a Goto or jump). + This forms a single forward link; the reciprocal sources are recorded in . - The destination. + + Weak reference is used to avoid ownership cycles and permit GC if blocks become detached. + + Weak reference to destination or null. - Gets or sets the index of the destination. + Gets or sets a serialized index-path representation of . + The path is a sequence of indexes from root to the referenced block. + Setting this reconstructs the weak destination link and updates the target's . - The index of the destination. + Index path list; empty if no destination. - Gets the sources. + Gets the collection of weak references to blocks that point to this block as their . - The sources. + + Each entry is a weak reference; entries may become invalid if the source is GC collected. + + List of weak references to source blocks. + + + + Gets or sets the index-paths for each source referring to this block. + Setting reconstructs the list and updates each source's . + + Collection of index paths; each path identifies a source block. - Gets or sets the parent. + Gets or sets the parent block in the hierarchical tree. + Setting handles removal from the previous parent and insertion into the new parent's . + Passing null detaches the block from the tree. - The parent. + + Insertion happens at the end of the new parent's children list. + + Parent block or null. - Gets or sets the position in the source. + Gets the zero-based character position in the original source text + where parsing produced this block. + Useful for diagnostics, mapping, and error reporting. - The position. + Character index into original source. Initializes a new instance of the class. + Creates an empty list bound to this instance as parent. - Sets the index of the DST. + Creates a destination weak reference from an index path and registers + this block as a source of the destination. - The item. - The value. - System.WeakReference<VBUnObfusicator.Models.ICSCode.ICodeBlock>?. + Current block initiating the link. + Index path to target block (root-first order). + Weak reference to destination or null if invalid path. + + Adds a reciprocal source entry in the destination's . + - Sets the index of the DST. + Creates a source weak reference from an index path and sets the source's + destination to this block. + + Current destination block. + Index path to source block. + Weak reference to source or null if invalid path. + + Updates the source block's property to point to . + + + + + Resolves an index path into a block starting from the root ancestor of . + + Reference block from which the root is derived. + Sequence of child indexes from root to desired block. + The resolved block or null if any index is invalid. + + + + Traverses upward from a given block to obtain the root ancestor. - The item. - The value. - System.WeakReference<VBUnObfusicator.Models.ICSCode.ICodeBlock>?. + Starting block. + Root block (topmost with no parent). - Gets the index of the DST. + Converts a weak block reference into an index path suitable for serialization. - The DST. - System.Collections.Generic.List<int>. + Weak reference to a target block. + Index path from root to target or empty list if null/unresolved. - Converts to string. + Returns a string representation including metadata and recursively nested blocks. + Intended for debugging; not guaranteed to be valid recompilable source. - string. + Multi-line string representation. - Converts to code. + Renders this block and its descendants into a formatted code string. - The indent. - string. + Current indentation level (spaces). First nested blocks increase indentation. + Formatted code snippet (not necessarily identical to original source). + + Adds an inline comment annotation for label blocks receiving more than two incoming sources. + - Moves the sub blocks. + Moves a contiguous range of child blocks within this block's list. - The i source. - The i DST. - The count. - bool. + Index of the first block to move. + Destination index for insertion (after move). + Number of blocks to move. + true if move succeeded; otherwise false. + + Rejects invalid indexes or no-op moves. Adjusts ordering while preserving parent references. + - Moves the sub blocks. + Moves a contiguous range of child blocks possibly into another block's parent list. - The i source. - The c DST. - The count. - bool. + Index of first block to move from this block. + Destination block whose parent list will receive moved blocks. + Number of blocks to move. + true if move succeeded; otherwise false. + + If shares the same parent, delegates to the indexed overload. + Otherwise reassigns each moved block's parent and reorders within the destination parent's list. + - Deletes the sub blocks. + Deletes a contiguous range of sub blocks, cleaning up destination/source link references. + + Index of first sub block to delete. + Number of blocks to delete. + true if deletion succeeded; otherwise false. + + For each removed block: + 1. Detaches from parent. + 2. Removes reciprocal source entries from its destination (if any). + 3. Clears destination links from its sources. + Does not recursively delete grandchildren beyond detaching chain references. + + + + + Moves this block to become a direct child of . - The i source. - The count. - bool. + Destination parent block. + true if successful; otherwise false. + + Fails if: + - is null + - This block has no current parent + - Destination is a descendant making cyclic structure + - Destination equals current parent (no-op) + - Equalses the specified other. + Determines whether this instance and another represent the same object reference. - The other. - bool. + Other block to compare. + true if same reference; otherwise false. diff --git a/Transpiler_pp/TranspilerLib/Interfaces/Code/IIECCode.cs b/Transpiler_pp/TranspilerLib/Interfaces/Code/IIECCode.cs index 1fabeaeb2..c9cd0f136 100644 --- a/Transpiler_pp/TranspilerLib/Interfaces/Code/IIECCode.cs +++ b/Transpiler_pp/TranspilerLib/Interfaces/Code/IIECCode.cs @@ -1,5 +1,11 @@ namespace TranspilerLib.Interfaces.Code; +/// +/// Represents an interface for IEC (International Electrotechnical Commission) codes, extending the functionality of +/// the interface. +/// +/// This interface serves as a marker or base for defining IEC-specific code implementations. It inherits +/// from , allowing for shared functionality across code-related types. public interface IIECCode : ICodeBase { } \ No newline at end of file diff --git a/Transpiler_pp/TranspilerLib/Interfaces/IHasParents.cs b/Transpiler_pp/TranspilerLib/Interfaces/IHasParents.cs index 56e2bee56..d0e2cf8af 100644 --- a/Transpiler_pp/TranspilerLib/Interfaces/IHasParents.cs +++ b/Transpiler_pp/TranspilerLib/Interfaces/IHasParents.cs @@ -1,7 +1,22 @@ namespace TranspilerLib.Interfaces { + /// + /// Definiert ein Objekt, das einen Verweis auf sein übergeordnetes Objekt (Parent) besitzt. + /// + /// Der Typ des übergeordneten Objekts. Muss eine Referenztyp-Klasse sein. + /// + /// Diese Schnittstelle unterstützt hierarchische Strukturen (z. B. AST-Knoten), + /// indem jedes Element optional auf sein Parent-Element verweist. Der Wert kann + /// null sein, wenn das Objekt an der Wurzel der Hierarchie steht. + /// public interface IHasParents where T : class { - T Parent { get; set; } + /// + /// Ruft das übergeordnete Objekt ab oder legt es fest. + /// + /// + /// Das Parent-Objekt vom Typ oder null, wenn kein Parent vorhanden ist. + /// + T? Parent { get; set; } } } \ No newline at end of file diff --git a/Transpiler_pp/TranspilerLib/Interfaces/IReader.cs b/Transpiler_pp/TranspilerLib/Interfaces/IReader.cs index 020353e6e..a666a46fa 100644 --- a/Transpiler_pp/TranspilerLib/Interfaces/IReader.cs +++ b/Transpiler_pp/TranspilerLib/Interfaces/IReader.cs @@ -1,18 +1,99 @@ namespace TranspilerLib.Interfaces { + /// + /// Definiert einen vorwärtsgerichteten, zustandsbehafteten Reader über eine + /// strukturierte Eingabe (z. B. Token-, Knoten- oder Elementsequenz). + /// Der Reader erlaubt sequenzielles Lesen von Start-/End-Elementen, Attributen und Werten. + /// + /// + /// Das Interface abstrahiert typische Funktionen ähnlich eines XML- oder AST-Readers: + /// - Navigation erfolgt ausschließlich vorwärts mittels . + /// - Attribute eines aktuellen Start-Elements können über Index abgefragt werden. + /// - Werte sind nur verfügbar, wenn wahr ist. + /// - Elementgrenzen werden über und kenntlich. + /// Implementierungen sollten nach Erreichen des Endes dauerhaft true zurückgeben. + /// public interface IReader { + /// + /// Gibt an, ob das aktuelle Start-Element leer ist (d. h. kein separates End-Element folgt). + /// + /// Typisch für Konstrukte wie <element /> in XML-ähnlichen Strukturen. bool IsEmptyElement { get; } + + /// + /// Gibt an, ob am aktuellen Readerpunkt ein Wert verfügbar ist. + /// + /// + /// Ist true, kann aufgerufen werden, um den Inhalt zu lesen. + /// Ein Wert kann z. B. Text- oder Literalinhalt sein. + /// bool HasValue { get; } + /// + /// Bestimmt, ob das Ende des Datenstroms erreicht wurde. + /// + /// true, wenn keine weiteren Elemente gelesen werden können; andernfalls false. bool EOF(); + + /// + /// Liefert die Anzahl der Attribute des aktuellen Start-Elements. + /// + /// Anzahl der verfügbaren Attribute (0, wenn keine vorhanden). int GetAttributeCount(); + + /// + /// Liefert den lokalen Namen eines Attributes anhand seines Index. + /// + /// Der nullbasierte Attributindex. + /// Der Name des Attributs. + /// Wenn der Index außerhalb des gültigen Bereichs liegt. string GetAttributeName(int i); + + /// + /// Liefert den Wert eines Attributes anhand seines Index. + /// + /// Der nullbasierte Attributindex. + /// Der Attributwert (typischerweise ), oder ein typ-spezifisches Objekt. + /// Wenn der Index außerhalb des gültigen Bereichs liegt. object GetAttributeValue(int i); + + /// + /// Liefert den lokalen Namen des aktuellen Elements oder Knotens. + /// + /// Der lokale Elementname, oder null, falls nicht anwendbar. string GetLocalName(); + + /// + /// Liefert den Wert am aktuellen Positionierungspunkt. + /// + /// + /// Nur aufrufen, wenn wahr ist. Rückgabewert kann je nach Implementierung + /// typisiert sein (z. B. , numerische Literaltypen oder komplexe Objekte). + /// + /// Der aktuelle Wert oder null, falls keiner vorhanden. object getValue(); + + /// + /// Gibt an, ob sich der Reader aktuell auf einem End-Element befindet. + /// + /// true, wenn ein End-Element erkannt wurde; andernfalls false. bool IsEndElement(); + + /// + /// Gibt an, ob sich der Reader aktuell auf einem Start-Element befindet. + /// + /// true, wenn ein Start-Element erkannt wurde; andernfalls false. bool IsStartElement(); + + /// + /// Liest den nächsten Knoten / das nächste Element aus der Eingabesequenz. + /// + /// + /// Bei erfolgreichem Lesen wird der interne Cursor weitergeschoben und die Eigenschaften + /// spiegeln den neuen Zustand wider. Bei Ende des Stroms liefert der Aufruf false. + /// + /// true, wenn ein weiterer Eintrag gelesen wurde; false bei Ende. bool Read(); } } \ No newline at end of file diff --git a/Transpiler_pp/TranspilerLib/Models/EToken.cs b/Transpiler_pp/TranspilerLib/Models/EToken.cs index 8d6aaece3..4edac9910 100644 --- a/Transpiler_pp/TranspilerLib/Models/EToken.cs +++ b/Transpiler_pp/TranspilerLib/Models/EToken.cs @@ -6,97 +6,295 @@ namespace TranspilerLib.Models; +/// +/// Represents all token kinds produced by the scanner / lexer. +/// public enum EToken { + /// End of input. tkEOF, + /// Whitespace (space, tab, etc.). tkWhitespace, + /// Identifier. tkIdentifier, + /// Label (identifier followed by colon in some languages). tkLabel, + /// String constant. tkStringConst, + /// Numeric literal. tkNumber, + /// Control character / character literal (^A .. ^Z). tkCharacter, // ^A .. ^Z + /// Line ending (newline sequence). tkLineEnding, // normal LineEnding + /// Tabulator character. tkTab, // a Tabulator-Key - tkLineComment, // // - tkComment, // /* ... */ + /// C style line comment //. + tkLineComment, // // + /// C style block comment /* ... */. + tkComment, // /* ... */ // Simple (one-character) tokens - tkCurlyBraceOpen, // '{' - tkCurlyBraceClose, // '}' - tkBraceOpen, // '(' - tkBraceClose, // ')' - tkMul, // '*' - tkPlus, // '+' - tkComma, // ',' - tkMinus, // '-' - tkDot, // '.' - tkDivision, // '/' - tkColon, // ':' - tkSemicolon, // ';' - tkLessThan, // '<' - tkAssign, // '=' - tkGreaterThan, // '>' - // tkAt, // '@' - tkSquaredBraceOpen, // '[' - tkSquaredBraceClose, // ']' - tkXor, // '^' (xor operator) - tkBackslash, // '\' - tkSingleAnd, // '&' - tkSingleOr, // '|' - tkNot, // '!' - tkAsk, // '?' - tkMod, // '%' - tkKomplement, // '~' - // Two-character tokens - tkEqual, // '==' - tkLambda, // '=>' - tkDotDot, // '..' - tkNotEqual, // '!=' - tkLessEqualThan, // '<=' - tkGreaterEqualThan, // '>=' - tkPower, // '**' + /// '{' + tkCurlyBraceOpen, // '{' + /// '}' + tkCurlyBraceClose, // '}' + /// '(' + tkBraceOpen, // '(' + /// ')' + tkBraceClose, // ')' + /// '*' + tkMul, // '*' + /// '+' + tkPlus, // '+' + /// ',' + tkComma, // ',' + /// '-' + tkMinus, // '-' + /// '.' + tkDot, // '.') + /// '/' + tkDivision, // '/' + /// ':' + tkColon, // ':' + /// ';' + tkSemicolon, // ';' + /// '%lt;' + tkLessThan, // '<' + /// '=' (single assign) + tkAssign, // '=' + /// '>' + tkGreaterThan, // '>' + // tkAt, // '@' + /// '[' + tkSquaredBraceOpen, // '[' + /// ']' + tkSquaredBraceClose, // ']' + /// '^' (xor operator) + tkXor, // '^' (xor operator) + /// '\' + tkBackslash, // '\' + /// '&' + tkSingleAnd, // '&' + /// '|' + tkSingleOr, // '|' + /// '!' + tkNot, // '!' + /// '?' + tkAsk, // '?' + /// '%' + tkMod, // '%' + /// '~' + tkKomplement, // '~' + // Two-character tokens + /// '==' equality operator. + tkEqual, // '==' + /// '=>' lambda operator. + tkLambda, // '=>' + /// '..' range / spread operator. + tkDotDot, // '..' + /// '!=' not equal operator. + tkNotEqual, // '!=' + /// '<=' less or equal operator. + tkLessEqualThan, // '<=' + /// '>=' greater or equal operator. + tkGreaterEqualThan, // '>=' + /// '**' power operator. + tkPower, // '**' + /// '><' symmetrical difference operator. tkSymmetricalDifference, // '><' - tkAskAsk, // '??' - tkPlusPlus, // '++' - tkMinusMinus, // '--' - tkAssignPlus, // '+=' - tkAssignMinus, // '-=' - tkAssignMul, // '*=' - tkAssignDivision, // '/=' - tkAssignModulo, // '%=' - tkAssignAnd, // '&=' - tkAssignOr, // '|=' - tkAssignXor, // '^=' - tkAnd, // '&&' - tkOr, // '||' - tkShl, // '<<' - tkShr, // '>>' - // Three-Character token - tkAssignShl, // '<<=' - tkAssignShr, // '>>=' - tkAssignAsk, // '??=' + /// '??' null-coalescing operator. + tkAskAsk, // '??' + /// '++' increment operator. + tkPlusPlus, // '++' + /// '--' decrement operator. + tkMinusMinus, // '--' + /// '+=' addition assignment. + tkAssignPlus, // '+=' + /// '-=' subtraction assignment. + tkAssignMinus, // '-=' + /// '*=' multiplication assignment. + tkAssignMul, // '*=' + /// '/=' division assignment. + tkAssignDivision, // '/=' + /// '%=' modulo assignment. + tkAssignModulo, // '%=' + /// '&=' bitwise and assignment. + tkAssignAnd, // '&=' + /// '|=' bitwise or assignment. + tkAssignOr, // '|=' + /// '^=' bitwise xor assignment. + tkAssignXor, // '^=' + /// '&&' logical and operator. + tkAnd, // '&&' + /// '||' logical or operator. + tkOr, // '||' + /// '%lt;%lt;' shift-left operator. + tkShl, // '<<' + /// '>>' shift-right operator. + tkShr, // '>>' + // Three-Character token + /// '<%lt;=' shift-left assignment. + tkAssignShl, // '<<=' + /// '>>=' shift-right assignment. + tkAssignShr, // '>>=' + /// '??=' null-coalescing assignment. + tkAssignAsk, // '??=' // Reserved words - tkAbstract, tkAs, tkBase, tkBool, - tkBreak, tkByte, tkCase, tkCatch, - tkChar, tkChecked, tkClass, tkConst, - tkContinue, tkDecimal, tkDefault, tkDelegate, - tkDo, tkDouble, tkElse, tkEnum, - tkEvent, tkExplicit, tkExtern, tkFalse, - tkFinally, tkFixed, tkFloat, tkFor, - tkForeach, tkGoto, tkIf, tkImplicit, - tkIn, tkInt, tkInterface, tkInternal, - tkIs, tkLock, tkLong, tkNamespace, - tkNew, tkNull, tkObject, tkOperator, - tkOut, tkOverride, tkParams, tkPrivate, - tkProtected, tkPublic, tkReadonly, tkRef, - tkReturn, tkSbyte, tkSealed, tkShort, - tkSizeof, tkStackalloc, tkStatic, tkString, - tkStruct, tkSwitch, tkThis, tkThrow, - tkTrue, tkTry, tkTypeof, tkUint, - tkUlong, tkUnchecked, tkUnsafe, tkUshort, - tkUsing, tkVirtual, tkVoid, tkVolatile, + /// 'abstract' keyword. + tkAbstract, + /// 'as' keyword. + tkAs, + /// 'base' keyword. + tkBase, + /// 'bool' keyword. + tkBool, + /// 'break' keyword. + tkBreak, + /// 'byte' keyword. + tkByte, + /// 'case' keyword. + tkCase, + /// 'catch' keyword. + tkCatch, + /// 'char' keyword. + tkChar, + /// 'checked' keyword. + tkChecked, + /// 'class' keyword. + tkClass, + /// 'const' keyword. + tkConst, + /// 'continue' keyword. + tkContinue, + /// 'decimal' keyword. + tkDecimal, + /// 'default' keyword. + tkDefault, + /// 'delegate' keyword. + tkDelegate, + /// 'do' keyword. + tkDo, + /// 'double' keyword. + tkDouble, + /// 'else' keyword. + tkElse, + /// 'enum' keyword. + tkEnum, + /// 'event' keyword. + tkEvent, + /// 'explicit' keyword. + tkExplicit, + /// 'extern' keyword. + tkExtern, + /// 'false' literal. + tkFalse, + /// 'finally' keyword. + tkFinally, + /// 'fixed' keyword. + tkFixed, + /// 'float' keyword. + tkFloat, + /// 'for' keyword. + tkFor, + /// 'foreach' keyword. + tkForeach, + /// 'goto' keyword. + tkGoto, + /// 'if' keyword. + tkIf, + /// 'implicit' keyword. + tkImplicit, + /// 'in' keyword. + tkIn, + /// 'int' keyword. + tkInt, + /// 'interface' keyword. + tkInterface, + /// 'internal' keyword. + tkInternal, + /// 'is' keyword. + tkIs, + /// 'lock' keyword. + tkLock, + /// 'long' keyword. + tkLong, + /// 'namespace' keyword. + tkNamespace, + /// 'new' keyword. + tkNew, + /// 'null' literal. + tkNull, + /// 'object' keyword. + tkObject, + /// 'operator' keyword. + tkOperator, + /// 'out' keyword. + tkOut, + /// 'override' keyword. + tkOverride, + /// 'params' keyword. + tkParams, + /// 'private' keyword. + tkPrivate, + /// 'protected' keyword. + tkProtected, + /// 'public' keyword. + tkPublic, + /// 'readonly' keyword. + tkReadonly, + /// 'ref' keyword. + tkRef, + /// 'return' keyword. + tkReturn, + /// 'sbyte' keyword. + tkSbyte, + /// 'sealed' keyword. + tkSealed, + /// 'short' keyword. + tkShort, + /// 'sizeof' keyword. + tkSizeof, + /// 'stackalloc' keyword. + tkStackalloc, + /// 'static' keyword. + tkStatic, + /// 'string' keyword. + tkString, + /// 'struct' keyword. + tkStruct, + /// 'switch' keyword. + tkSwitch, + /// 'this' keyword. + tkThis, + /// 'throw' keyword. + tkThrow, + /// 'true' literal. + tkTrue, + /// 'try' keyword. + tkTry, + /// 'typeof' keyword. + tkTypeof, + /// 'uint' keyword. + tkUint, + /// 'ulong' keyword. + tkUlong, + /// 'unchecked' keyword. + tkUnchecked, + /// 'unsafe' keyword. + tkUnsafe, + /// 'ushort' keyword. + tkUshort, + /// 'using' keyword. + tkUsing, + /// 'virtual' keyword. + tkVirtual, + /// 'void' keyword. + tkVoid, + /// 'volatile' keyword. + tkVolatile, + /// 'while' keyword. tkWhile } - diff --git a/Transpiler_pp/TranspilerLib/Models/ParentedItemsList.cs b/Transpiler_pp/TranspilerLib/Models/ParentedItemsList.cs index 65fe6bb7a..3739f69c4 100644 --- a/Transpiler_pp/TranspilerLib/Models/ParentedItemsList.cs +++ b/Transpiler_pp/TranspilerLib/Models/ParentedItemsList.cs @@ -5,23 +5,73 @@ namespace TranspilerLib.Models; +/// +/// Stellt eine Liste von Elementen bereit, die jeweils einen Verweis auf ihr übergeordnetes Objekt (Parent) besitzen. +/// Beim Einfügen oder Hinzufügen eines Elements wird dessen automatisch auf den Parent dieser Liste gesetzt, +/// sofern es noch keinen Parent hat oder ein anderer Parent hinterlegt ist. +/// +/// +/// Der Elementtyp. Muss eine Klassen-Referenz sein, implementieren und vergleichbar über sein. +/// +/// +/// Typisches Einsatzszenario sind hierarchische oder baumartige Strukturen (z. B. AST-Knoten), +/// bei denen ein konsistenter Parent-Verweis gepflegt werden soll. +/// public class ParentedItemsList : IHasParents, IList where T : class, IHasParents, IEquatable { - List list = new(); + /// + /// Interne Speicherliste der Elemente. + /// + private readonly List list = new(); + + /// + /// Der Parent, der allen eingefügten Elementen zugewiesen wird (sofern erforderlich). + /// + /// + /// Ist dieser Wert null, werden neue Elemente nicht verändert, selbst wenn sie keinen Parent besitzen. + /// public T Parent { get; set; } + + /// + /// Gibt die Anzahl der enthaltenen Elemente zurück. + /// public int Count => list.Count; + /// + /// Immer false, da diese Liste veränderbar ist. + /// public bool IsReadOnly => false; + /// + /// Ruft das Element am angegebenen Index ab oder legt es fest. + /// + /// Der nullbasierte Index. + /// Das Element am angegebenen Index. + /// Wenn ungültig ist. public T this[int index] { get => list[index]; set => list[index] = value; } + /// + /// Erstellt eine neue Instanz der mit dem angegebenen Parent. + /// + /// Der Parent, der neuen Elementen zugewiesen wird (falls nötig). public ParentedItemsList(T _parent) { Parent = _parent; } + /// + /// Ermittelt den Index eines bestimmten Elements. + /// + /// Das zu suchende Element. + /// Der Index oder -1, falls nicht gefunden. public int IndexOf(T item) => list.IndexOf(item); + /// + /// Fügt ein Element an einer bestimmten Position ein und setzt dessen Parent falls erforderlich. + /// + /// Der nullbasierte Insert-Index. + /// Das einzufügende Element. + /// Wenn ungültig ist. public void Insert(int index, T item) { if (!item.Parent?.Equals(Parent) ?? Parent != null) @@ -29,8 +79,17 @@ public void Insert(int index, T item) list.Insert(index, item); } + /// + /// Entfernt das Element am angegebenen Index. + /// + /// Der nullbasierte Index. + /// Wenn ungültig ist. public void RemoveAt(int index) => list.RemoveAt(index); + /// + /// Fügt ein Element am Ende ein und setzt dessen Parent falls erforderlich. + /// + /// Das hinzuzufügende Element. public void Add(T item) { if (!item.Parent?.Equals(Parent) ?? Parent != null) @@ -38,16 +97,42 @@ public void Add(T item) list.Add(item); } + /// + /// Entfernt alle Elemente aus der Liste. + /// public void Clear() => list.Clear(); + /// + /// Prüft, ob ein Element enthalten ist. + /// + /// Das zu prüfende Element. + /// true, wenn enthalten; andernfalls false. public bool Contains(T item) => list.Contains(item); + /// + /// Kopiert die Elemente in ein Zielarray ab einem Startindex. + /// + /// Das Zielarray. + /// Startindex im Zielarray. public void CopyTo(T[] array, int arrayIndex) => list.CopyTo(array, arrayIndex); + /// + /// Entfernt ein bestimmtes Element, sofern vorhanden. + /// + /// Das zu entfernende Element. + /// true, wenn entfernt; andernfalls false. public bool Remove(T item) => list.Remove(item); + /// + /// Gibt einen Enumerator über die Elemente zurück. + /// + /// Enumerator über die Liste. public IEnumerator GetEnumerator() => list.GetEnumerator(); + /// + /// Nicht-generischer Enumerator. + /// + /// Enumerator über die Liste. IEnumerator IEnumerable.GetEnumerator() => list.GetEnumerator(); } diff --git a/Transpiler_pp/TranspilerLib/TranspilerLib.csproj b/Transpiler_pp/TranspilerLib/TranspilerLib.csproj index 91352c03f..d278854cc 100644 --- a/Transpiler_pp/TranspilerLib/TranspilerLib.csproj +++ b/Transpiler_pp/TranspilerLib/TranspilerLib.csproj @@ -17,8 +17,7 @@ $(TargetFrameworks);net10.0 - - + diff --git a/Transpiler_pp/TranspilerLibTests/AssemblyInfo.cs b/Transpiler_pp/TranspilerLibTests/AssemblyInfo.cs new file mode 100644 index 000000000..ba900e03a --- /dev/null +++ b/Transpiler_pp/TranspilerLibTests/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; + +[assembly: Parallelize(Workers =0, Scope = ExecutionScope.MethodLevel)] diff --git a/Transpiler_pp/TranspilerLibTests/Models/Interpreter/IECInterpreterTests.cs b/Transpiler_pp/TranspilerLibTests/Models/Interpreter/IECInterpreterTests.cs index 60842cc03..7e71c2261 100644 --- a/Transpiler_pp/TranspilerLibTests/Models/Interpreter/IECInterpreterTests.cs +++ b/Transpiler_pp/TranspilerLibTests/Models/Interpreter/IECInterpreterTests.cs @@ -158,9 +158,9 @@ public void SystemfunctionsTest(Enum eAct, object value,bool xExp,object exp) { var m = methods.FirstOrDefault(m => (values.Count() == m?.GetParameters().Count()) && m.GetParameters().First().ParameterType.IsAssignableFrom(values[0].GetType())); if (m.ReturnType.IsAssignableTo(typeof(double))) - Assert.AreEqual((double)exp, (double)m?.Invoke(null, values),1e-7d); + Assert.AreEqual((double)exp, (double)(m?.Invoke(null, values) ?? throw new InvalidOperationException("Method returned null")), 1e-7d); else if (m.ReturnType.IsAssignableTo(typeof((int, int))) && exp is object[] aexp) - Assert.AreEqual((aexp[0], aexp[1]), ((int,int))m?.Invoke(null, values)); + Assert.AreEqual((aexp[0], aexp[1]), ((int,int))(m?.Invoke(null, values) ?? throw new InvalidOperationException("Method returned null"))); else Assert.AreEqual(exp, m?.Invoke(null, values)); } @@ -169,7 +169,7 @@ public void SystemfunctionsTest(Enum eAct, object value,bool xExp,object exp) // if (value is int i && exp is int ) value = (double)i; var m = methods.First(m => m?.GetParameters().First().ParameterType.IsAssignableFrom(value.GetType())??false); if (m.ReturnType.IsAssignableTo(typeof(double))) - Assert.AreEqual((double)exp, (double)m?.Invoke(null, [value]),1e-7); + Assert.AreEqual((double)exp, (double)(m?.Invoke(null, [value]) ?? throw new InvalidOperationException("Method returned null")), 1e-7); else Assert.AreEqual(exp, m?.Invoke(null, [value])); } diff --git a/Transpiler_pp/TranspilerLibTests/Models/Scanner/CCodeBlockTests.cs b/Transpiler_pp/TranspilerLibTests/Models/Scanner/CCodeBlockTests.cs index ec50508dc..8071d307e 100644 --- a/Transpiler_pp/TranspilerLibTests/Models/Scanner/CCodeBlockTests.cs +++ b/Transpiler_pp/TranspilerLibTests/Models/Scanner/CCodeBlockTests.cs @@ -18,38 +18,38 @@ public class CCodeBlockTests : TestBase { ["0a", TestCSDataClass.TestDataList0(), (new int[] { }, 3, 3, 1), false, new[] { TestCSDataClass.testDataExp0 }], - ["1a", TestCSDataClass.TestDataList1(), (new[] { 8, 1, 5 }, 5, 5, 1), false, new[] { TestCSDataClass.testDataExp1 }], - ["1b", TestCSDataClass.TestDataList1(), (new[] { 8, 1, 5 }, -1, 5, 1), false, new[] { TestCSDataClass.testDataExp1 }], - ["1c", TestCSDataClass.TestDataList1(), (new[] { 8, 1, 5 }, 5, -1, 1), false, new[] { TestCSDataClass.testDataExp1 }], - ["1d", TestCSDataClass.TestDataList1(), (new[] { 8, 1, 5 }, 131, 5, 1), false, new[] { TestCSDataClass.testDataExp1 }], - ["1e", TestCSDataClass.TestDataList1(), (new[] { 8, 1, 5 }, 5, 131, 1), false, new[] { TestCSDataClass.testDataExp1 }], - ["1f", TestCSDataClass.TestDataList1(), (new[] { 8, 1, 5 }, 125, 5, 6), false, new[] { TestCSDataClass.testDataExp1 }], - ["1g0", TestCSDataClass.TestDataList1(), (new[] { 8, 1, 5 }, 6, 9, 3), true, new[] { TestCSDataClass.testDataExp1 }], - ["1gd", TestCSDataClass.TestDataList1(), (new[] { 8, 1, 5 }, 6, 13, 3), true, new[] { TestCSDataClass.testDataMoveExp }], - ["1gu", TestCSDataClass.TestDataList1(), (new[] { 8, 1, 5 }, 9, 6, 4), true, new[] { TestCSDataClass.testDataMoveExp }], - - ["2a", TestCSDataClass.TestDataList2(), (new[] { 7, 1, 3 }, 5, 5, 1), false, new[] { TestCSDataClass.testDataExp2 }], - ["2b", TestCSDataClass.TestDataList2(), (new[] { 7, 1, 3 }, -1, 5, 1), false, new[] { TestCSDataClass.testDataExp2 }], - ["2c", TestCSDataClass.TestDataList2(), (new[] { 7, 1, 3 }, 5, -1, 1), false, new[] { TestCSDataClass.testDataExp2 }], - ["2d", TestCSDataClass.TestDataList2(), (new[] { 7, 1, 3 }, 34, 5, 1), false, new[] { TestCSDataClass.testDataExp2 }], - ["2e", TestCSDataClass.TestDataList2(), (new[] { 7, 1, 3 }, 5, 34, 1), false, new[] { TestCSDataClass.testDataExp2 }], - ["2f", TestCSDataClass.TestDataList2(), (new[] { 7, 1, 3 }, 30, 5, 5), false, new[] { TestCSDataClass.testDataExp2 }], + ["1a", TestCSDataClass.TestDataList1()!, (new[] { 8, 1, 5 }, 5, 5, 1), false, new[] { TestCSDataClass.testDataExp1 }], + ["1b", TestCSDataClass.TestDataList1()!, (new[] { 8, 1, 5 }, -1, 5, 1), false, new[] { TestCSDataClass.testDataExp1 }], + ["1c", TestCSDataClass.TestDataList1()!, (new[] { 8, 1, 5 }, 5, -1, 1), false, new[] { TestCSDataClass.testDataExp1 }], + ["1d", TestCSDataClass.TestDataList1()!, (new[] { 8, 1, 5 }, 131, 5, 1), false, new[] { TestCSDataClass.testDataExp1 }], + ["1e", TestCSDataClass.TestDataList1()!, (new[] { 8, 1, 5 }, 5, 131, 1), false, new[] { TestCSDataClass.testDataExp1 }], + ["1f", TestCSDataClass.TestDataList1()!, (new[] { 8, 1, 5 }, 125, 5, 6), false, new[] { TestCSDataClass.testDataExp1 }], + ["1g0", TestCSDataClass.TestDataList1()!, (new[] { 8, 1, 5 }, 6, 9, 3), true, new[] { TestCSDataClass.testDataExp1 }], + ["1gd", TestCSDataClass.TestDataList1()!, (new[] { 8, 1, 5 }, 6, 13, 3), true, new[] { TestCSDataClass.testDataMoveExp }], + ["1gu", TestCSDataClass.TestDataList1()!, (new[] { 8, 1, 5 }, 9, 6, 4), true, new[] { TestCSDataClass.testDataMoveExp }], + + ["2a", TestCSDataClass.TestDataList2()!, (new[] { 7, 1, 3 }, 5, 5, 1), false, new[] { TestCSDataClass.testDataExp2 }], + ["2b", TestCSDataClass.TestDataList2()!, (new[] { 7, 1, 3 }, -1, 5, 1), false, new[] { TestCSDataClass.testDataExp2 }], + ["2c", TestCSDataClass.TestDataList2()!, (new[] { 7, 1, 3 }, 5, -1, 1), false, new[] { TestCSDataClass.testDataExp2 }], + ["2d", TestCSDataClass.TestDataList2()!, (new[] { 7, 1, 3 }, 34, 5, 1), false, new[] { TestCSDataClass.testDataExp2 }], + ["2e", TestCSDataClass.TestDataList2()!, (new[] { 7, 1, 3 }, 5, 34, 1), false, new[] { TestCSDataClass.testDataExp2 }], + ["2f", TestCSDataClass.TestDataList2()!, (new[] { 7, 1, 3 }, 30, 5, 5), false, new[] { TestCSDataClass.testDataExp2 }], }; public static IEnumerable TestListDelete => new object[][] { - ["0a", TestCSDataClass.TestDataList0(), (new int[] { }, 5, 9), false, new[] { TestCSDataClass.testDataExp0 }], + ["0a", TestCSDataClass.TestDataList0()!, (new int[] { }, 5, 9), false, new[] { TestCSDataClass.testDataExp0 }], - ["1b", TestCSDataClass.TestDataList1(), (new[] { 8, 1, 5 }, -1, 1), false, new[] { TestCSDataClass.testDataExp1 }], - ["1d", TestCSDataClass.TestDataList1(), (new[] { 8, 1, 5 }, 131, 1), false, new[] { TestCSDataClass.testDataExp1 }], - ["1f", TestCSDataClass.TestDataList1(), (new[] { 8, 1, 5 }, 125, 6), false, new[] { TestCSDataClass.testDataExp1 }], - ["1gd", TestCSDataClass.TestDataList1(), (new[] { 8, 1, 5 }, 6, 3), true, new[] { TestCSDataClass.testDataDeleteExp }], - ["1gu", TestCSDataClass.TestDataList1(), (new[] { 8, 1, 5 }, 9, 4), true, new[] { TestCSDataClass.testDataDelete2Exp }], + ["1b", TestCSDataClass.TestDataList1()!, (new[] { 8, 1, 5 }, -1, 1), false, new[] { TestCSDataClass.testDataExp1 }], + ["1d", TestCSDataClass.TestDataList1()!, (new[] { 8, 1, 5 }, 131, 1), false, new[] { TestCSDataClass.testDataExp1 }], + ["1f", TestCSDataClass.TestDataList1()!, (new[] { 8, 1, 5 }, 125, 6), false, new[] { TestCSDataClass.testDataExp1 }], + ["1gd", TestCSDataClass.TestDataList1()!, (new[] { 8, 1, 5 }, 6, 3), true, new[] { TestCSDataClass.testDataDeleteExp }], + ["1gu", TestCSDataClass.TestDataList1()!, (new[] { 8, 1, 5 }, 9, 4), true, new[] { TestCSDataClass.testDataDelete2Exp }], - ["2b", TestCSDataClass.TestDataList2(), (new[] { 7, 1, 3 }, -1, 1), false, new[] { TestCSDataClass.testDataExp2 }], - ["2d", TestCSDataClass.TestDataList2(), (new[] { 7, 1, 3 }, 34, 1), false, new[] { TestCSDataClass.testDataExp2 }], - ["2f", TestCSDataClass.TestDataList2(), (new[] { 7, 1, 3 }, 30, 5), false, new[] { TestCSDataClass.testDataExp2 }], + ["2b", TestCSDataClass.TestDataList2()!, (new[] { 7, 1, 3 }, -1, 1), false, new[] { TestCSDataClass.testDataExp2 }], + ["2d", TestCSDataClass.TestDataList2()!, (new[] { 7, 1, 3 }, 34, 1), false, new[] { TestCSDataClass.testDataExp2 }], + ["2f", TestCSDataClass.TestDataList2()!, (new[] { 7, 1, 3 }, 30, 5), false, new[] { TestCSDataClass.testDataExp2 }], }; #pragma warning restore CS8618 // Ein Non-Nullable-Feld muss beim Beenden des Konstruktors einen Wert ungleich NULL enthalten. Erwägen Sie die Deklaration als Nullable. diff --git a/Transpiler_pp/TranspilerLibTests/Models/Scanner/CSCodeTests.cs b/Transpiler_pp/TranspilerLibTests/Models/Scanner/CSCodeTests.cs index d2ee4c011..36960b9cd 100644 --- a/Transpiler_pp/TranspilerLibTests/Models/Scanner/CSCodeTests.cs +++ b/Transpiler_pp/TranspilerLibTests/Models/Scanner/CSCodeTests.cs @@ -56,7 +56,7 @@ public class CSCodeTests : TestBase public static IEnumerable TestListParse => new object[][] { - ["0", TestCSDataClass.TestDataList0(), new[] { TestCSDataClass.testDataExp0 }], + ["0", TestCSDataClass.TestDataList0()!, new[] { TestCSDataClass.testDataExp0 }], ["1", TestCSDataClass.TestDataList1()!, new[] { TestCSDataClass.testDataExp1 }], ["2", TestCSDataClass.TestDataList2()!, new[] { TestCSDataClass.testDataExp2 }], ["3", TestCSDataClass.TestDataList3(), new[] { TestCSDataClass.testDataExp3 }], diff --git a/Transpiler_pp/TranspilerLibTests/Models/Scanner/IECCodeBuilderTests.cs b/Transpiler_pp/TranspilerLibTests/Models/Scanner/IECCodeBuilderTests.cs index 59eeecb1c..a8cbff149 100644 --- a/Transpiler_pp/TranspilerLibTests/Models/Scanner/IECCodeBuilderTests.cs +++ b/Transpiler_pp/TranspilerLibTests/Models/Scanner/IECCodeBuilderTests.cs @@ -29,7 +29,7 @@ public class IECCodeBuilderTests ["7" , GetTokenlist("07"), GetBuildCommands("07") ], ]; - private static string[] GetBuildCommands(string sFNStumb) + private static string[]? GetBuildCommands(string sFNStumb) { var sFile = BlocksTextPath.Format(sFNStumb.PadLeft(2, '0')); if (File.Exists(sFile)) diff --git a/Transpiler_pp/TranspilerLibTests/TestData/TestCSDataClass.cs b/Transpiler_pp/TranspilerLibTests/TestData/TestCSDataClass.cs index 915053637..e210fc2d8 100644 --- a/Transpiler_pp/TranspilerLibTests/TestData/TestCSDataClass.cs +++ b/Transpiler_pp/TranspilerLibTests/TestData/TestCSDataClass.cs @@ -2675,39 +2675,39 @@ public void Test7() #region Intermediste token-list public static object TestDataList0() => new List(){ - ("public const string TestData()", CodeBlockType.Operation, 0), - ("{", CodeBlockType.Block, 1), - ("", CodeBlockType.Operation, 1), - ("// Discarded unreachable code: IL_0085", CodeBlockType.LComment, 1), - ("string test =", CodeBlockType.Operation, 1), - ("\"test\"", CodeBlockType.String, 1), - (";", CodeBlockType.Operation, 1), - ("goto IL_0001;", CodeBlockType.Goto, 1), - ("", CodeBlockType.Operation, 1), - ("/* Only one IL_0001 is allowed */", CodeBlockType.Comment, 1), - ("IL_0001:", CodeBlockType.Label, 1), - ("Test(test:", CodeBlockType.Label, 1), - ("", CodeBlockType.Operation, 1), - ("\"Some Test\"", CodeBlockType.String, 1), - (");", CodeBlockType.Operation, 1), - ("switch", CodeBlockType.Operation, 1), -("(test)", CodeBlockType.Operation, 1), - ("{", CodeBlockType.Block, 2), - ("case", CodeBlockType.Operation, 2), - ("\"test\"", CodeBlockType.String, 2), - (":", CodeBlockType.Label, 2), - ("case", CodeBlockType.Operation, 2), - ("\"test2\"", CodeBlockType.String, 2), - (":", CodeBlockType.Label, 2), - ("break;", CodeBlockType.Operation, 2), - ("default:", CodeBlockType.Label, 2), - ("goto IL_0002;", CodeBlockType.Goto, 2), - ("}", CodeBlockType.Block, 2), - ("goto IL_0002;", CodeBlockType.Goto, 1), - ("IL_0002:", CodeBlockType.Label, 1), - ("return", CodeBlockType.Operation, 1), -("test;", CodeBlockType.Operation, 1), - ("}", CodeBlockType.Block, 1),}; + ("public const string TestData()", CodeBlockType.Operation, 0), + ("{", CodeBlockType.Block, 1), + ("", CodeBlockType.Operation, 1), + ("// Discarded unreachable code: IL_0085", CodeBlockType.LComment, 1), + ("string test =", CodeBlockType.Operation, 1), + ("\"test\"", CodeBlockType.String, 1), + (";", CodeBlockType.Operation, 1), + ("goto IL_0001;", CodeBlockType.Goto, 1), + ("", CodeBlockType.Operation, 1), + ("/* Only one IL_0001 is allowed */", CodeBlockType.Comment, 1), + ("IL_0001:", CodeBlockType.Label, 1), + ("Test(test:", CodeBlockType.Label, 1), + ("", CodeBlockType.Operation, 1), + ("\"Some Test\"", CodeBlockType.String, 1), + (");", CodeBlockType.Operation, 1), + ("switch", CodeBlockType.Operation, 1), + ("(test)", CodeBlockType.Operation, 1), + ("{", CodeBlockType.Block, 2), + ("case", CodeBlockType.Operation, 2), + ("\"test\"", CodeBlockType.String, 2), + (":", CodeBlockType.Label, 2), + ("case", CodeBlockType.Operation, 2), + ("\"test2\"", CodeBlockType.String, 2), + (":", CodeBlockType.Label, 2), + ("break;", CodeBlockType.Operation, 2), + ("default:", CodeBlockType.Label, 2), + ("goto IL_0002;", CodeBlockType.Goto, 2), + ("}", CodeBlockType.Block, 2), + ("goto IL_0002;", CodeBlockType.Goto, 1), + ("IL_0002:", CodeBlockType.Label, 1), + ("return", CodeBlockType.Operation, 1), + ("test;", CodeBlockType.Operation, 1), + ("}", CodeBlockType.Block, 1),}; public static object TestDataList1_org() => new List() { ("private void Befehl_Click(object eventSender, EventArgs eventArgs)", CodeBlockType.Operation, 0), ("{", CodeBlockType.Block, 1), @@ -3066,7 +3066,7 @@ public void Test7() ("}", CodeBlockType.Block, 2), ("}", CodeBlockType.Block, 1), }; - public static object? TestDataList1() => ReadObject(Resources.Test1DataList); + public static object TestDataList1() => ReadObject(Resources.Test1DataList)!; public static object TestDataList2_org() => new List() { ("private void Button2_Click(object sender, EventArgs e)", CodeBlockType.Operation, 0), @@ -3197,7 +3197,7 @@ public void Test7() ("}", CodeBlockType.Block, 1), }; - public static object? TestDataList2() => ReadObject(Resources.Test2DataList); + public static object TestDataList2() => ReadObject(Resources.Test2DataList)!; public static object TestDataList3() => new List(){ ("public void Test3()", CodeBlockType.Operation, 0), @@ -3324,11 +3324,11 @@ public void Test7() ("return;", CodeBlockType.Operation, 1), ("}", CodeBlockType.Block, 1), }; - public static object? TestDataList8() => ReadObject(Resources.Test8DataList); - public static object? TestDataList9() => ReadObject(Resources.Test9DataList); - public static object? TestDataList10() => ReadObject(Resources.Test10DataList); - public static object? TestDataList11() => ReadObject(Resources.Test11DataList); - public static object? TestDataList12() => ReadObject(Resources.Test12DataList); - public static object? TestDataList13() => ReadObject(Resources.Test13DataList); + public static object TestDataList8() => ReadObject(Resources.Test8DataList)!; + public static object TestDataList9() => ReadObject(Resources.Test9DataList)!; + public static object TestDataList10() => ReadObject(Resources.Test10DataList)!; + public static object TestDataList11() => ReadObject(Resources.Test11DataList)!; + public static object TestDataList12() => ReadObject(Resources.Test12DataList)!; + public static object TestDataList13() => ReadObject(Resources.Test13DataList)!; #endregion } From 15952be1c0e2e62a773beb57fb029b5dd2054da4 Mon Sep 17 00:00:00 2001 From: "Rosewich, Christian" Date: Tue, 11 Nov 2025 10:58:15 +0100 Subject: [PATCH 015/597] Verbesserung der Dokumentation und Token-Handler-Logik MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit XML-Kommentare hinzugefügt, um die Klasse `TokenHandlerBase` und ihre Methoden umfassend zu dokumentieren. Die Methode `EmitToken` wurde überarbeitet, um die Parameterübergabe zu verbessern. Neue Hilfsmethoden (`GetNxtChar`, `GetPrvChar`, `GetText`) hinzugefügt, um wiederkehrende Operationen zu kapseln. Die Klasse `TokenizeData` wurde erweitert, um den Zustand während des Tokenisierungsprozesses zu kapseln. Öffentliche Felder und ein Standardkonstruktor wurden hinzugefügt, um die Effizienz bei häufigen Aktualisierungen zu gewährleisten. Diese Änderungen verbessern die Lesbarkeit, Wartbarkeit und Modularität des Codes erheblich. --- .../Models/Scanner/TokenHandlerBase.cs | 67 ++++++++++++++++++- .../Models/Scanner/TokenizeData.cs | 32 +++++++++ 2 files changed, 97 insertions(+), 2 deletions(-) diff --git a/Transpiler_pp/TranspilerLib/Models/Scanner/TokenHandlerBase.cs b/Transpiler_pp/TranspilerLib/Models/Scanner/TokenHandlerBase.cs index e6c440c91..bd7e80457 100644 --- a/Transpiler_pp/TranspilerLib/Models/Scanner/TokenHandlerBase.cs +++ b/Transpiler_pp/TranspilerLib/Models/Scanner/TokenHandlerBase.cs @@ -5,17 +5,80 @@ namespace TranspilerLib.Models.Scanner; +/// +/// Basisklasse für spezifische Token-Handler innerhalb des Scannervorgangs. +/// Stellt Hilfsmethoden bereit, um Zeichen aus dem Originalcode zu lesen und aus dem Scan-Bereich Tokens zu emittieren. +/// +/// +/// Die Klasse kapselt wiederkehrende Operationen wie: +/// 1. Ermitteln des nächsten / vorherigen Zeichens ohne Ausnahme auszulösen. +/// 2. Extraktion des aktuell gescannten Textsegments (Bereich zwischen und ). +/// 3. Erzeugung und Übergabe eines an einen bereitgestellten Delegaten (). +/// public abstract class TokenHandlerBase { - + /// + /// Erzeugt aus dem aktuellen Scanbereich ein und übergibt es an den angegebenen Delegaten. + /// + /// Delegat, der das erzeugte Token verarbeitet (kann null sein). + /// Scan-Zustandsdaten (Positionsmarker, Stacktiefe etc.). + /// Der zuzuweisende für das erzeugte Token. + /// Der vollständige Quellcode, aus dem gescannt wird. + /// + /// Optionaler Off-Set, um den Endbereich zu erweitern (z. B. um abschließende Zeichen einzuschließen). + /// Typischer Einsatz bei Abschlusszeichen oder nachlaufenden Trennern. + /// + /// + /// Der extrahierte Text reicht von data.Pos2 bis data.Pos + offs (inklusive) und wird vor Übergabe getrimmt. + /// Wenn null ist, passiert nichts. + /// protected static void EmitToken(TokenDelegate? token, TokenizeData data, CodeBlockType type, string originalCode, int offs = 0) - => token?.Invoke(new TokenData(originalCode.Substring(data.Pos2, data.Pos - data.Pos2 + offs).Trim(), type, data.Stack,data.Pos2)); + => token?.Invoke(new TokenData( + originalCode.Substring(data.Pos2, data.Pos - data.Pos2 + offs).Trim(), + type, + data.Stack, + data.Pos2)); + + /// + /// Liefert das nächste Zeichen relativ zur übergebenen Position. + /// + /// Aktuelle Indexposition im Quellcode. + /// Der vollständige Quelltext. + /// + /// Das Zeichen an Position Pos + 1, oder das Null-Zeichen '\0', wenn das Ende erreicht ist. + /// + /// + /// Sicherer Zugriff ohne Ausnahme am Ende des Strings. + /// protected static char GetNxtChar(int Pos, string OriginalCode) => Pos + 1 < OriginalCode.Length ? OriginalCode[Pos + 1] : '\u0000'; + /// + /// Liefert das vorherige Zeichen relativ zur übergebenen Position. + /// + /// Aktuelle Indexposition im Quellcode. + /// Der vollständige Quelltext. + /// + /// Das Zeichen an Position Pos - 1, oder das erste Zeichen, wenn gleich 0 ist. + /// + /// + /// Negative Indizes werden abgefangen, indem auf Index 0 zurückgegriffen wird. + /// protected static char GetPrvChar(int Pos, string OriginalCode) => OriginalCode[Math.Max(Pos - 1, 0)]; + /// + /// Extrahiert den aktuell gescannten Text zwischen und . + /// + /// Aktuelle Scan-Daten mit Start- und Endposition. + /// Optional: Vollständiger Quellcode. Wenn leer, wird ein leerer String zurückgegeben. + /// Optionaler Erweiterungs-Offset (positiv oder 0). Negative Werte werden als 0 behandelt. + /// + /// Das nicht getrimmte Rohsegment des Quelltexts. Bei ungültigen Längen wird ein leerer String geliefert. + /// + /// + /// Diese Methode führt kein Trimming durch (im Gegensatz zu ). + /// protected static string GetText(TokenizeData data, string OriginalCode = "", int offs = 0) => OriginalCode.Substring(data.Pos2, Math.Max(data.Pos - data.Pos2 + offs, 0)); } \ No newline at end of file diff --git a/Transpiler_pp/TranspilerLib/Models/Scanner/TokenizeData.cs b/Transpiler_pp/TranspilerLib/Models/Scanner/TokenizeData.cs index 8fb42a921..33354067c 100644 --- a/Transpiler_pp/TranspilerLib/Models/Scanner/TokenizeData.cs +++ b/Transpiler_pp/TranspilerLib/Models/Scanner/TokenizeData.cs @@ -1,12 +1,44 @@ namespace TranspilerLib.Models { + /// + /// Kapselt den veränderlichen Zustand während des Tokenisierungs-/Scan-Vorgangs. + /// + /// + /// Diese Struktur dient als einfacher Container für Positions- und Zustandsinformationen, + /// die typischerweise von einem Scanner oder Lexer inkrementell aktualisiert werden. + /// Alle Felder sind absichtlich öffentlich und als einfache Felder (keine Properties) gehalten, + /// um Overhead bei sehr häufigen Aktualisierungen zu vermeiden. + /// public class TokenizeData { + /// + /// Primärer Positionszeiger im Quellpuffer (aktuelles Zeichen / aktueller Index). + /// public int Pos = 0; + + /// + /// Sekundärer Positionszeiger (z. B. Start eines Tokens oder Lookahead-Beginn). + /// public int Pos2 = 0; + + /// + /// Allgemeiner Zähler / Stack-Level (z. B. für Verschachtelungen wie Klammern). + /// public int Stack = 0; + + /// + /// Aktueller Zustandswert der zustandsbasierten Tokenisierungs- / FSM-Logik. + /// public int State = 0; + + /// + /// Allgemeines Flag für temporäre Markierungen oder bedingte Pfade im Scan-Prozess. + /// public bool flag = false; + + /// + /// Initialisiert eine neue Instanz mit Standardwerten (alle numerischen Felder = 0, Flag = false). + /// public TokenizeData() { } } } From 4a038816bfc1d94f748fb3828a33bd8df93fb45d Mon Sep 17 00:00:00 2001 From: "Rosewich, Christian" Date: Tue, 11 Nov 2025 11:15:28 +0100 Subject: [PATCH 016/597] =?UTF-8?q?Kommentare=20und=20unn=C3=B6tige=20Usin?= =?UTF-8?q?gs=20entfernt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Überflüssige `/// `-Kommentare, die die Models-Namespace- Dokumentation beschrieben, wurden aus mehreren Dateien entfernt: - CodeBlockType.cs - TokenData.cs - ICSCode.cs - ICodeBlock.cs - CodeBlock.cs Zusätzlich wurden nicht mehr benötigte `using`-Anweisungen für `System` und `System.Collections.Generic` entfernt, um den Code zu bereinigen. --- Transpiler_pp/TranspilerLib/Data/CodeBlockType.cs | 3 --- Transpiler_pp/TranspilerLib/Data/TokenData.cs | 4 ---- Transpiler_pp/TranspilerLib/Interfaces/Code/ICSCode.cs | 6 ------ Transpiler_pp/TranspilerLib/Interfaces/Code/ICodeBlock.cs | 3 --- Transpiler_pp/TranspilerLib/Models/Scanner/CodeBlock.cs | 3 --- 5 files changed, 19 deletions(-) diff --git a/Transpiler_pp/TranspilerLib/Data/CodeBlockType.cs b/Transpiler_pp/TranspilerLib/Data/CodeBlockType.cs index 3b736ed8d..ebed6ce50 100644 --- a/Transpiler_pp/TranspilerLib/Data/CodeBlockType.cs +++ b/Transpiler_pp/TranspilerLib/Data/CodeBlockType.cs @@ -11,9 +11,6 @@ // // // *********************************************************************** -/// -/// The Models namespace. -/// namespace TranspilerLib.Data; /// diff --git a/Transpiler_pp/TranspilerLib/Data/TokenData.cs b/Transpiler_pp/TranspilerLib/Data/TokenData.cs index 7f19fc222..1fbcce75d 100644 --- a/Transpiler_pp/TranspilerLib/Data/TokenData.cs +++ b/Transpiler_pp/TranspilerLib/Data/TokenData.cs @@ -11,10 +11,6 @@ // // // *********************************************************************** - -/// -/// Token representation produced by the tokenizer and consumed by builders and parsers. -/// namespace TranspilerLib.Data; /// diff --git a/Transpiler_pp/TranspilerLib/Interfaces/Code/ICSCode.cs b/Transpiler_pp/TranspilerLib/Interfaces/Code/ICSCode.cs index f470e69aa..5ffec364f 100644 --- a/Transpiler_pp/TranspilerLib/Interfaces/Code/ICSCode.cs +++ b/Transpiler_pp/TranspilerLib/Interfaces/Code/ICSCode.cs @@ -11,12 +11,6 @@ // // // *********************************************************************** -using System; -using System.Collections.Generic; - -/// -/// The Models namespace. -/// namespace TranspilerLib.Interfaces.Code; /// diff --git a/Transpiler_pp/TranspilerLib/Interfaces/Code/ICodeBlock.cs b/Transpiler_pp/TranspilerLib/Interfaces/Code/ICodeBlock.cs index d326b7e3d..8aae5f10c 100644 --- a/Transpiler_pp/TranspilerLib/Interfaces/Code/ICodeBlock.cs +++ b/Transpiler_pp/TranspilerLib/Interfaces/Code/ICodeBlock.cs @@ -15,9 +15,6 @@ using System.Collections.Generic; using TranspilerLib.Data; -/// -/// The Models namespace. -/// namespace TranspilerLib.Interfaces.Code; /// diff --git a/Transpiler_pp/TranspilerLib/Models/Scanner/CodeBlock.cs b/Transpiler_pp/TranspilerLib/Models/Scanner/CodeBlock.cs index 90cfd77b3..a0aba9ab8 100644 --- a/Transpiler_pp/TranspilerLib/Models/Scanner/CodeBlock.cs +++ b/Transpiler_pp/TranspilerLib/Models/Scanner/CodeBlock.cs @@ -19,9 +19,6 @@ using TranspilerLib.Data; using TranspilerLib.Interfaces.Code; -/// -/// The Models namespace. -/// namespace TranspilerLib.Models.Scanner; From d19e89e7c171f3daed9ddd14b1b944c50486d712 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Tue, 11 Nov 2025 16:07:37 +0100 Subject: [PATCH 017/597] AA05_CommandParCalc --- .../AA21_Buttons/Views/ButtonsView.axaml.cs | 36 +++++ .../AA21_Buttons/MIGRATION_README.md | 128 ++++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100644 Avalonia_Apps/AA21_Buttons/AA21_Buttons/Views/ButtonsView.axaml.cs create mode 100644 Avalonia_Apps/AA21_Buttons/MIGRATION_README.md diff --git a/Avalonia_Apps/AA21_Buttons/AA21_Buttons/Views/ButtonsView.axaml.cs b/Avalonia_Apps/AA21_Buttons/AA21_Buttons/Views/ButtonsView.axaml.cs new file mode 100644 index 000000000..5756e1eff --- /dev/null +++ b/Avalonia_Apps/AA21_Buttons/AA21_Buttons/Views/ButtonsView.axaml.cs @@ -0,0 +1,36 @@ +// *********************************************************************** +// Assembly : MVVM_21_Buttons +// Author : Mir +// Created : 08-12-2022 +// +// Last Modified By : Mir +// Last Modified On : 08-12-2022 +// *********************************************************************** +// +// Copyright © JC-Soft 2022 +// +// +// *********************************************************************** +using AA21_Buttons.ViewModels; +using Avalonia.Controls; +using Microsoft.Extensions.DependencyInjection; + +namespace AA21_Buttons.Views; + +/// +/// ButtonsView: UserControl mit 3x3 Button-Grid für Flip-Spiel. +/// +public partial class ButtonsView : UserControl +{ + /// + /// Initializes a new instance of the class. + /// + public ButtonsView() + { + InitializeComponent(); + if (Design.IsDesignMode) return; + + var vm = App.Services.GetRequiredService(); + DataContext = vm; + } +} diff --git a/Avalonia_Apps/AA21_Buttons/MIGRATION_README.md b/Avalonia_Apps/AA21_Buttons/MIGRATION_README.md new file mode 100644 index 000000000..1569e3f16 --- /dev/null +++ b/Avalonia_Apps/AA21_Buttons/MIGRATION_README.md @@ -0,0 +1,128 @@ +# AA21_Buttons Migration: WPF ? Avalonia.UI + +## Migrationsstatus + +Diese Migration hat die Grundstruktur fr die Konvertierung des WPF-Projekts AA21_Buttons zu Avalonia.UI mit folgenden Komponenten erstellt: + +## ? Abgeschlossene Schritte + +1. **Projektdatei** (`AA21_Buttons.csproj`) + - Konfiguriert fr Avalonia 11.3.8 + - .NET 8.0-windows und .NET 9.0-windows Targets + - UTF-8 Encoding + - Zentrale Paketverwaltung + +2. **ViewModel Migration** (`ViewModels/ButtonsViewViewModel.cs`) + - Migriert zu MVVM Community Toolkit + - `ObservableObject` statt BaseViewModel + - `[RelayCommand]` statt DelegateCommand + - `[ObservableProperty]` fr Properties mit automatischem ChangeNotification + +3. **Views** (Avalonia.axaml) + - `MainWindow.axaml` - Hauptfenster mit TabControl + - `ButtonsView.axaml` - 3x3 Button Grid + - Vereinfachtes Binding-System fr Avalonia + +4. **Converter** (`Converters/BoolToColorConverter.cs`) + - Portiert zu Avalonia `IValueConverter` + - `SolidColorBrush` statt WPF Brush + - Untersttzung fr Array-Element-Konvertierung + +5. **Dependency Injection** + - `App.xaml.cs` mit `ServiceCollection` + - `MainWindowViewModel` als ViewModel-Container + - Singleton-Registrierung fr ViewModels + +6. **Entry Point** (`Program.cs`) + - Avalonia `AppBuilder` Setup + - `StartWithClassicDesktopLifetime` fr Desktop-Apps + +## ?? Datei-bersicht + +``` +AA21_Buttons/ +??? AA21_Buttons/ +? ??? AA21_Buttons.csproj (aktualisiert) +? ??? App.axaml (neu) +? ??? App.xaml.cs (migriert) +? ??? MainWindow.axaml (neu) +? ??? MainWindow.xaml.cs (migriert) +? ??? Program.cs (neu) +? ??? ViewModels/ +? ? ??? ButtonsViewViewModel.cs (migriert zu MVVM Toolkit) +? ? ??? MainWindowViewModel.cs (neu) +? ??? Views/ +? ? ??? ButtonsView.axaml (neu) +? ? ??? ButtonsView.xaml.cs (migriert) +? ??? Converters/ +? ? ??? BoolToColorConverter.cs (migriert zu Avalonia) +? ??? Properties/ +? ??? Resources.resx (vereinfacht) +??? Directory.Packages.props (zentrale Paketverwaltung) +``` + +## ?? Nachbearbeitung erforderlich + +Da NuGet-Restore in dieser Umgebung Probleme verursacht, fhre folgende Schritte lokal aus: + +```bash +# 1. Solution in Visual Studio ffnen +# 2. NuGet Package Manager ffnen (Tools ? NuGet Package Manager) +# 3. Package Manager Console ausfhren: + +Update-Package -Reinstall Avalonia +Update-Package -Reinstall Avalonia.Desktop +Update-Package -Reinstall Avalonia.Themes.Fluent +Update-Package -Reinstall CommunityToolkit.Mvvm +Update-Package -Reinstall Microsoft.Extensions.DependencyInjection + +# 4. Projekt neu bauen +Build ? Rebuild Solution + +# 5. Testen +Ctrl+F5 zum Starten +``` + +## ?? Zentrale Pakete + +Die erforderlichen Pakete sind in `AA21_Buttons/Directory.Packages.props` definiert: +- **Avalonia 11.3.8** - UI Framework +- **Avalonia.Desktop 11.3.8** - Desktop-Untersttzung +- **Avalonia.Themes.Fluent 11.3.8** - Fluent Theme +- **Avalonia.Fonts.Inter 11.3.8** - Inter Font +- **CommunityToolkit.Mvvm 8.4.0** - MVVM Pattern +- **Microsoft.Extensions.DependencyInjection 9.0.10** - DI Container + +## ?? Spiellogik + +Das Spiel funktioniert wie folgt: +- 33 Grid mit Buttons (1-9) +- Klick auf Button: Toggles Button + benachbarte Buttons +- Reset-Button: Setzt Spiel zurck (nur Button 1 aktiv) +- Farbcodierung: Grn (aktiv) / Dunkelrot (inaktiv) + +## ?? MVVM-Architektur + +- **MainWindowViewModel**: Container fr andere ViewModels +- **ButtonsViewViewModel**: Spiellogik mit RelayCommands +- **BoolToColorConverter**: Konvertiert bool[]/bool zu SolidColorBrush +- **Dependency Injection**: Alle ViewModels sind Singletons + +## ? Best Practices implementiert + +? Eine Klasse pro Datei +? UTF-8 Encoding auf allen Dateien +? MVVM Community Toolkit +? Dependency Injection +? Namespacing nach Verzeichnisstruktur +? XML-Dokumentation (/// ) +? Avalonia statt WPF-Binding +? Keine hardgecodeten Strings + +## ?? Nchste Schritte + +1. Lokal NuGet-Pakete installieren +2. Projekt neu aufbauen +3. App starten und Spiellogik testen +4. Optional: Styling erweitern (aktuell minimal) +5. Optional: Tests schreiben From 50d7f91fd6ff9890d11ce3f5656076190352e9dd Mon Sep 17 00:00:00 2001 From: Joe Care Date: Tue, 11 Nov 2025 16:07:43 +0100 Subject: [PATCH 018/597] AA20_Sysdialogs --- .../AA20_Sysdialogs/MainWindow.axaml | 14 +-- .../AA20_Sysdialogs/Views/SysDialogs.axaml | 86 +++++++++---------- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/Avalonia_Apps/AA20_SysDialogs/AA20_Sysdialogs/MainWindow.axaml b/Avalonia_Apps/AA20_SysDialogs/AA20_Sysdialogs/MainWindow.axaml index 000a171e8..99f7dca33 100644 --- a/Avalonia_Apps/AA20_SysDialogs/AA20_Sysdialogs/MainWindow.axaml +++ b/Avalonia_Apps/AA20_SysDialogs/AA20_Sysdialogs/MainWindow.axaml @@ -1,9 +1,9 @@ - + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:views="clr-namespace:AA20_SysDialogs.Views" + mc:Ignorable="d" x:Class="AA20_SysDialogs.MainWindow" + Width="800" Height="600" Title="AA20 System Dialogs"> + diff --git a/Avalonia_Apps/AA20_SysDialogs/AA20_Sysdialogs/Views/SysDialogs.axaml b/Avalonia_Apps/AA20_SysDialogs/AA20_Sysdialogs/Views/SysDialogs.axaml index 237a3ad2d..c4a61d943 100644 --- a/Avalonia_Apps/AA20_SysDialogs/AA20_Sysdialogs/Views/SysDialogs.axaml +++ b/Avalonia_Apps/AA20_SysDialogs/AA20_Sysdialogs/Views/SysDialogs.axaml @@ -1,48 +1,48 @@ - - - - - - - - - public partial class App : Application { - private ServiceProvider? _serviceProvider; + private static ServiceProvider? _serviceProvider; + public static IServiceProvider Services => _serviceProvider; public override void Initialize() { @@ -57,6 +59,7 @@ private static void ConfigureServices(ServiceCollection services) { services.AddSingleton(); services.AddSingleton(); + services.AddSingleton(); services.AddSingleton(); } } diff --git a/Avalonia_Apps/AA21_Buttons/AA21_Buttons/App.xaml b/Avalonia_Apps/AA21_Buttons/AA21_Buttons/App.xaml deleted file mode 100644 index 185d58886..000000000 --- a/Avalonia_Apps/AA21_Buttons/AA21_Buttons/App.xaml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/Avalonia_Apps/AA21_Buttons/AA21_Buttons/Converters/BoolToColorConverter.cs b/Avalonia_Apps/AA21_Buttons/AA21_Buttons/Converters/BoolToColorConverter.cs index 604dc1d15..45545ee53 100644 --- a/Avalonia_Apps/AA21_Buttons/AA21_Buttons/Converters/BoolToColorConverter.cs +++ b/Avalonia_Apps/AA21_Buttons/AA21_Buttons/Converters/BoolToColorConverter.cs @@ -2,10 +2,13 @@ // Copyright JC-Soft 2022 // -using Avalonia.Data.Converters; -using Avalonia.Media; using System; +using System.Collections; +using System.Collections.Generic; using System.Globalization; +using Avalonia.Data; +using Avalonia.Data.Converters; +using Avalonia.Media; namespace AA21_Buttons.Converters; @@ -17,48 +20,58 @@ public class BoolToColorConverter : IValueConverter /// /// Farbe fr true-Werte (aktiver Button) /// - public static Color TrueColor = Colors.Green; + public IBrush? TrueColor { get; set; } = Brushes.Lime; /// /// Farbe fr false-Werte (inaktiver Button) /// - public static Color FalseColor = Colors.DarkRed; + public IBrush? FalseColor { get; set; } = Brushes.Maroon; /// /// Konvertiert einen Wert zu einer Farbe. /// public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { - return value switch + bool result = false; + + // Direkter boolescher Wert + if (value is bool b) + { + result = b; + } + // Array-/Listen mit Index-Parameter + else if (parameter != null && TryGetIndex(parameter, out var index)) { - bool b when parameter is string s && s.StartsWith("#") => - new SolidColorBrush(ParseColorFromParameter(s, b)), - bool b => - new SolidColorBrush(b ? TrueColor : FalseColor), - bool[] ba when parameter is string s && int.TryParse(s, out int idx) => - new SolidColorBrush(ba[idx] ? TrueColor : FalseColor), - _ => new SolidColorBrush(FalseColor) - }; + if (value is bool[] arr && index >= 0 && index < arr.Length) + result = arr[index]; + else if (value is IList list && index >= 0 && index < list.Count && list[index] is bool lb) + result = lb; + else if (value is IReadOnlyList ro && index >= 0 && index < ro.Count) + result = ro[index]; + } + + return result ? TrueColor : FalseColor; } /// - /// Umgekehrte Konvertierung nicht untersttzt. + /// Umgekehrte Konvertierung nicht verwendet. /// public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) - { - throw new NotImplementedException(); - } + => BindingOperations.DoNothing; - /// - /// Parsed Farben aus Parameter-String (Format: "#color1:#color2"). - /// - private static Color ParseColorFromParameter(string parameter, bool value) + private static bool TryGetIndex(object parameter, out int index) { - var colors = parameter.Split(':'); - if (colors.Length < 2) - return value ? TrueColor : FalseColor; - - string colorStr = colors[value ? 1 : 0]; - return Color.Parse(colorStr); + index = -1; + switch (parameter) + { + case int i: + index = i ; // Annahme: Buttons verwenden 1-basierte Indizes + return true; + case string s when int.TryParse(s, out var parsed): + index = parsed ; + return true; + default: + return false; + } } } diff --git a/Avalonia_Apps/AA21_Buttons/AA21_Buttons/MainWindow.axaml b/Avalonia_Apps/AA21_Buttons/AA21_Buttons/MainWindow.axaml index 31d3b5c6b..a16db786d 100644 --- a/Avalonia_Apps/AA21_Buttons/AA21_Buttons/MainWindow.axaml +++ b/Avalonia_Apps/AA21_Buttons/AA21_Buttons/MainWindow.axaml @@ -10,7 +10,7 @@ - + diff --git a/Avalonia_Apps/AA21_Buttons/AA21_Buttons/MainWindow.xaml b/Avalonia_Apps/AA21_Buttons/AA21_Buttons/MainWindow.xaml deleted file mode 100644 index 6d3762c75..000000000 --- a/Avalonia_Apps/AA21_Buttons/AA21_Buttons/MainWindow.xaml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Avalonia_Apps/AA21_Buttons/AA21_Buttons/ViewModels/ButtonsViewViewModel.cs b/Avalonia_Apps/AA21_Buttons/AA21_Buttons/ViewModels/ButtonsViewViewModel.cs index ca8a2a289..0f042ce5a 100644 --- a/Avalonia_Apps/AA21_Buttons/AA21_Buttons/ViewModels/ButtonsViewViewModel.cs +++ b/Avalonia_Apps/AA21_Buttons/AA21_Buttons/ViewModels/ButtonsViewViewModel.cs @@ -37,7 +37,7 @@ public ButtonsViewViewModel() /// /// Kann die Play-Aktion ausgefhrt werden? /// - private bool CanPlay => LastPara != null; + private bool CanPlay(object? parameter) => true;// LastPara == null || LastPara != parameter; /// /// Play-Befehl: Wechselt den Zustand des angeklickten Buttons und benachbarter Buttons. diff --git a/Avalonia_Apps/AA21_Buttons/AA21_Buttons/Views/ButtonsView.axaml b/Avalonia_Apps/AA21_Buttons/AA21_Buttons/Views/ButtonsView.axaml index 865c08f17..c1bda1844 100644 --- a/Avalonia_Apps/AA21_Buttons/AA21_Buttons/Views/ButtonsView.axaml +++ b/Avalonia_Apps/AA21_Buttons/AA21_Buttons/Views/ButtonsView.axaml @@ -1,14 +1,27 @@ - - + + + + + - - - - - - - - - /// The x. /// The y. - [DataTestMethod] + [TestMethod] [DataRow(0.0, 0.0)] [DataRow(1.0, 0.0)] [DataRow(0.0, 1.0)] @@ -233,7 +233,7 @@ public void VecTest4(double x, double y) /// The v2y. /// The expx. /// The expy. - [DataTestMethod()] + [TestMethod()] [DataRow(0, 0, 0, 0, 0, 0)] [DataRow(0, 1, 0, 0, 0, 1)] [DataRow(1, 0, 0, 0, 1, 0)] @@ -264,7 +264,7 @@ public void AddTest(double v1x, double v1y, double v2x, double v2y, double expx, /// The v2y. /// The expx. /// The expy. - [DataTestMethod()] + [TestMethod()] [DataRow(0, 0, 0, 0, 0, 0)] [DataRow(0, 1, 0, 0, 0, 1)] [DataRow(1, 0, 0, 0, 1, 0)] @@ -292,7 +292,7 @@ public void SubtractTest(double v1x, double v1y, double v2x, double v2y, double /// The angle. /// The middle. /// The exp. - [DataTestMethod()] + [TestMethod()] [DataRow(0, 0, 0)] [DataRow(0, Double.NaN, 0)] [DataRow(Math.PI, 0, -Math.PI)] @@ -322,7 +322,7 @@ public void WinkelNormTest(Double angle, Double middle, Double exp) /// The v y. /// The exp x. /// The exp y. - [DataTestMethod()] + [TestMethod()] [DataRow(0, 0, 0, 0)] [DataRow(0, 1, -1, 0)] @@ -353,7 +353,7 @@ public void Rot90Test(double v_x, double v_y, double exp_x, double exp_y) /// The v y. /// The exp x. /// The exp y. - [DataTestMethod()] + [TestMethod()] [DataRow(0, 0, 0, 0)] [DataRow(0, 1, 0, -1)] @@ -386,7 +386,7 @@ public void NegateTest(double v_x, double v_y, double exp_x, double exp_y) /// if set to true [exp]. /// The exlength. /// The exangle. - [DataTestMethod()] + [TestMethod()] [DataRow(0, 0, false, 0, 0)] [DataRow(1, 0, true, 1, 0)] @@ -424,7 +424,7 @@ public void TryLengthAngleTest(double v_x, double v_y, bool exp, double exlength /// The exv y. /// The length. /// The angle. - [DataTestMethod()] + [TestMethod()] [DataRow(0, 0, 0, 0)] [DataRow(1, 0, 1, 0)] @@ -480,7 +480,7 @@ public void MultTest(double v_x, double v_y, double s, double exp_x, double exp_ /// The v2 x. /// The v2 y. /// The exp. - [DataTestMethod()] + [TestMethod()] [DataRow(0, 0, 0, 0, 0)] [DataRow(0, 1, 1, 0, 0)] @@ -544,7 +544,7 @@ public void MultTest1(double v1_x, double v1_y, double v2_x, double v2_y, double /// The v2 y. /// The exp x. /// The exp y. - [DataTestMethod()] + [TestMethod()] [DataRow(0, 0, 0, 0, 0, 0)] [DataRow(0, 1, 1, 0, 0, 1)] @@ -608,7 +608,7 @@ public void CMultTest(double v1_x, double v1_y, double v2_x, double v2_y, double /// The s. /// The v x. /// The v y. - [DataTestMethod()] + [TestMethod()] [DynamicData(nameof(VectorMultiplyTestData))] public void DivTest(double exp_x, double exp_y, double s, double v_x, double v_y) { @@ -627,7 +627,7 @@ public void DivTest(double exp_x, double exp_y, double s, double v_x, double v_y /// The w. /// The exp x. /// The exp y. - [DataTestMethod()] + [TestMethod()] // Null [DataRow(0, 0, 0, 0, 0)] [DataRow(0, 0, 1, 0, 0)] @@ -666,7 +666,7 @@ public void RotateTest(double v_x, double v_y, double w, double exp_x, double ex /// The w. /// The exp x. /// The exp y. - [DataTestMethod()] + [TestMethod()] // Null [DataRow(0, 0, 0, 0, 0)] [DataRow(0, 0, 1, 0, 0)] @@ -697,7 +697,7 @@ public void Rotate2Test(double v_x, double v_y, double w, double exp_x, double e AssertAreEqual(v, exp.Rotate(-w), $"{v} = {exp}.Rotate({-w})"); } - [DataTestMethod] + [TestMethod] [DataRow("00", 0, new double[] { 1, 0 }, new double[] { 1, 0 })] [DataRow("01", 1, new double[] { 1, 0 }, new double[] { 1, 0 })] [DataRow("02", 2, new double[] { 1, 0 }, new double[] { 0, -1 })] @@ -721,7 +721,7 @@ public void DoTest(string name, int f, double[] dv, double[] dexp) } - [DataTestMethod] + [TestMethod] [DataRow("00", 0, new double[] { 1, 0 }, new double[] { 1, 0 })] [DataRow("01", 1, new double[] { 1, 0 }, new double[] { 1, 0 })] [DataRow("02", 2, new double[] { 1, 0 }, new double[] { 0, -1 })] @@ -745,7 +745,7 @@ public void DoTest2(string name, int f, double[] dv, double[] dexp) } - [DataTestMethod] + [TestMethod] [DataRow("00", new[] { 1d, 0d }, new[] { 1d, 0d }, true, 0d)] [DataRow("01", new double[] { 1, 0 }, new double[] { 1, 0 }, true, 0d)] [DataRow("02", new double[] { 1, 0 }, new double[] { 0, -1 }, true, 4.71238898038469d)] @@ -765,7 +765,7 @@ public void TryWinkel2VecTest(string name, double[] dv1, double[] dv2, bool xExp Assert.AreEqual(fExp == 0 ? 0d : 2 * Math.PI - fExp, wnkl2, $"{name} W2"); } - [DataTestMethod] + [TestMethod] [DataRow("00", new double[] { 1, 0 }, new double[] { 1, 0 }, true, 0d)] [DataRow("01", new double[] { 1, 0 }, new double[] { 1, 0 }, true, 0d)] [DataRow("02", new double[] { 1, 0 }, new double[] { 0, -1 }, true, 4.71238898038469d)] @@ -784,7 +784,7 @@ public void TryWinkel2VecTest2(string name, double[] dv1, double[] dv2, bool xEx Assert.AreEqual(fExp == 0 ? 0d : 2 * Math.PI - fExp, wnkl2, $"{name} W2"); } - [DataTestMethod] + [TestMethod] [DataRow("00", new double[] { 1, 0 }, new double[] { 1, 0 }, new double[] { 1, 0 }, new double[] { 0, 0 }, 0d)] [DataRow("01", new double[] { 1, 0 }, new double[] { 0, 0 }, new double[] { 1, 0 }, new double[] { 0, 0 }, 0d)] [DataRow("02", new double[] { 1, 0 }, new double[] { 1, 0 }, new double[] { 0, 0 }, new double[] { 0, 0 }, 0d)] diff --git a/CSharpBible/Libraries/MathLibraryTests/TwoDim/StTrackSegTests.cs b/CSharpBible/Libraries/MathLibraryTests/TwoDim/StTrackSegTests.cs index a156a57dc..cb474d37d 100644 --- a/CSharpBible/Libraries/MathLibraryTests/TwoDim/StTrackSegTests.cs +++ b/CSharpBible/Libraries/MathLibraryTests/TwoDim/StTrackSegTests.cs @@ -16,7 +16,7 @@ public void StTrackSegTests1() Assert.AreEqual(double.NaN, st.lrRadius); } - [DataTestMethod] + [TestMethod] [DataRow(new[] { 1d, 2d }, new[] { 3d, 4d },5d)] [DataRow(new[] { 6d, 5d }, new[] { 4d, 3d },2d)] public void StTrackSegTests2(double[] adAct1, double[] adAct2,double fAct3) diff --git a/CSharpBible/Libraries/MathLibraryTests/TwoDim/VectorTests.cs b/CSharpBible/Libraries/MathLibraryTests/TwoDim/VectorTests.cs index 64f06cc4d..7ae5c347c 100644 --- a/CSharpBible/Libraries/MathLibraryTests/TwoDim/VectorTests.cs +++ b/CSharpBible/Libraries/MathLibraryTests/TwoDim/VectorTests.cs @@ -20,7 +20,7 @@ public void VectorInitTest1() Assert.AreEqual(0, _v.y); } - [DataTestMethod()] + [TestMethod()] [DataRow(0, 0, "( 0, 0)")] [DataRow(0, 1, "( 0, 1)")] [DataRow(1, 0, "( 1, 0)")] @@ -41,7 +41,7 @@ public void VectorInitTest2(double x,double y,string _) /// The x. /// The y. /// The exp. - [DataTestMethod()] + [TestMethod()] [DataRow(0, 0, "( 0, 0)")] [DataRow(0, 1, "( 0, 1)")] [DataRow(1, 0, "( 1, 0)")] @@ -59,7 +59,7 @@ public void ToStringTest2(Double x, Double y, string exp) /// Gets or sets the vector as a tuple. /// /// The vector as a tuple. - [DataTestMethod()] + [TestMethod()] [DataRow(0, 0, "( 0, 0)")] [DataRow(0, 1, "( 0, 1)")] [DataRow(1, 0, "( 1, 0)")] @@ -76,7 +76,7 @@ public void ValueTupleGetTest(Double x, Double y, string _) /// Gets or sets the vector as a tuple. /// /// The vector as a tuple. - [DataTestMethod()] + [TestMethod()] [DataRow(0, 0, "( 0, 0)")] [DataRow(0, 1, "( 0, 1)")] [DataRow(1, 0, "( 1, 0)")] @@ -96,7 +96,7 @@ public void ValueTupleSetTest(Double x, Double y, string _) /// Gets or sets the vector as a tuple. /// /// The vector as a tuple. - [DataTestMethod()] + [TestMethod()] [DataRow(0, 0, "( 0, 0)")] [DataRow(0, 1, "( 0, 1)")] [DataRow(1, 0, "( 1, 0)")] @@ -113,7 +113,7 @@ public void ComplexGetTest(Double x, Double y, string _) /// Gets or sets the vector as a tuple. /// /// The vector as a tuple. - [DataTestMethod()] + [TestMethod()] [DataRow(0, 0, "( 0, 0)")] [DataRow(0, 1, "( 0, 1)")] [DataRow(1, 0, "( 1, 0)")] @@ -132,7 +132,7 @@ public void ComplexSetTest(Double x, Double y, string _) /// Gets or sets the vector as a tuple. /// /// The vector as a tuple. - [DataTestMethod()] + [TestMethod()] [DataRow(0, 0, 0, 0, true)] [DataRow(0, 1, 0, 0, false)] [DataRow(1, 0, 0, 0, false)] @@ -159,7 +159,7 @@ public void EqualsTest(Double x, Double y, Double x2, Double y2, bool xExp) Assert.AreEqual(xExp, v2.Equals(v1), $"({x2},{y2}).Equals(({x},{y}))"); } - [DataTestMethod()] + [TestMethod()] [DataRow(0, 0, 0)] [DataRow(0, 1, -4194304)] [DataRow(1, 0, 1072693248)] From 744ef8df298f4179ebe04266a71c1bc00725db0d Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:13 +0100 Subject: [PATCH 046/597] DemoLibraryTests --- .../MVVM_Tutorial/DemoLibraryTests/DemoLibraryTests.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/DemoLibraryTests/DemoLibraryTests.csproj b/CSharpBible/MVVM_Tutorial/DemoLibraryTests/DemoLibraryTests.csproj index 137e342b8..bc6104522 100644 --- a/CSharpBible/MVVM_Tutorial/DemoLibraryTests/DemoLibraryTests.csproj +++ b/CSharpBible/MVVM_Tutorial/DemoLibraryTests/DemoLibraryTests.csproj @@ -14,8 +14,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 38453f16cd7f86b34f3775a1473c57e7a5ee2fc9 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:20 +0100 Subject: [PATCH 047/597] ItemsControlTut3_netTests --- .../ItemsControlTut3_netTests.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/ItemsControlTut3_netTests/ItemsControlTut3_netTests.csproj b/CSharpBible/MVVM_Tutorial/ItemsControlTut3_netTests/ItemsControlTut3_netTests.csproj index 2a331f6b2..f71bef169 100644 --- a/CSharpBible/MVVM_Tutorial/ItemsControlTut3_netTests/ItemsControlTut3_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/ItemsControlTut3_netTests/ItemsControlTut3_netTests.csproj @@ -15,8 +15,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 110a878b7ac9b0d7cc5493318dc25e29b9ef0467 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:22 +0100 Subject: [PATCH 048/597] ItemsControlTut4_netTests --- .../ItemsControlTut4_netTests.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/ItemsControlTut4_netTests/ItemsControlTut4_netTests.csproj b/CSharpBible/MVVM_Tutorial/ItemsControlTut4_netTests/ItemsControlTut4_netTests.csproj index fd27264dc..49679af21 100644 --- a/CSharpBible/MVVM_Tutorial/ItemsControlTut4_netTests/ItemsControlTut4_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/ItemsControlTut4_netTests/ItemsControlTut4_netTests.csproj @@ -14,8 +14,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 17d05d61f1d5ea3c7d9d309fbb0ee3453cb44470 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:24 +0100 Subject: [PATCH 049/597] ListBindingTests --- .../MVVM_Tutorial/ListBindingTests/ListBindingTests.csproj | 4 ++-- .../ListBindingTests/ListBinding_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBindingTests.csproj b/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBindingTests.csproj index bb39b5c88..c1bde3495 100644 --- a/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBindingTests.csproj +++ b/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBindingTests.csproj @@ -26,8 +26,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBinding_netTests.csproj b/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBinding_netTests.csproj index 67febf751..46e6e1f1f 100644 --- a/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBinding_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBinding_netTests.csproj @@ -18,8 +18,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 5fde198309f228fd592cf3074299d86a5e39eea9 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:27 +0100 Subject: [PATCH 050/597] MVVM_00a_CTTemplateTests --- .../MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplateTests.csproj | 4 ++-- .../MVVM_00a_CTTemplate_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplateTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplateTests.csproj index 622a473c0..7e33304e8 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplateTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplateTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplate_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplate_netTests.csproj index 2b0fad7f5..d16b8cbcc 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplate_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplate_netTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 59ba6deabfaa40f5c124069342e5e41414e3977e Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:27 +0100 Subject: [PATCH 051/597] MVVM_00_IoCTemplate --- .../MVVM_00_IoCTemplate/MVVM_00_IoCTemplate.csproj | 2 +- .../MVVM_00_IoCTemplate/MVVM_00_IoCTemplate_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate.csproj index 9e243068e..e6405f28b 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate.csproj @@ -8,7 +8,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate_net.csproj index 780795add..fb6cc840b 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate_net.csproj @@ -8,7 +8,7 @@ - + From 074e0230a7d523c488bb200978bcf6b271567c02 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:28 +0100 Subject: [PATCH 052/597] MVVM_00_IoCTemplateTests --- .../MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplateTests.csproj | 4 ++-- .../MVVM_00_IoCTemplate_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplateTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplateTests.csproj index 83e2131a6..a422005a2 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplateTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplateTests.csproj @@ -12,8 +12,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplate_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplate_netTests.csproj index e055df9e0..33e3faf98 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplate_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplate_netTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 7e9d0908c3a14e4c25764737a5a837c117e017e7 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:30 +0100 Subject: [PATCH 053/597] MVVM_00_TemplateTests --- .../MVVM_00_TemplateTests/MVVM_00_TemplateTests.csproj | 4 ++-- .../MVVM_00_TemplateTests/MVVM_00_Template_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_TemplateTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_TemplateTests.csproj index 5046ace6f..44b502663 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_TemplateTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_TemplateTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_Template_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_Template_netTests.csproj index 0b0c45898..e64dc00dd 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_Template_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_Template_netTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 7369cbcaeaff5176104cac0227ed08396e244c49 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:32 +0100 Subject: [PATCH 054/597] MVVM_03a_CTNotifyChangeTests --- .../MVVM_03a_CTNotifyChangeTests.csproj | 4 ++-- .../MVVM_03a_CTNotifyChange_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChangeTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChangeTests.csproj index 2018d9727..e01d0c95c 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChangeTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChangeTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChange_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChange_netTests.csproj index 79c70f000..6357e2b50 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChange_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChange_netTests.csproj @@ -7,8 +7,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 65f2f1f920dfb84dbe45dcae849a5f1f1f84c27f Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:34 +0100 Subject: [PATCH 055/597] MVVM_03_NotifyChangeTests --- .../MVVM_03_NotifyChangeTests.csproj | 4 ++-- .../MVVM_03_NotifyChange_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChangeTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChangeTests.csproj index 950bb6d57..c037e16c3 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChangeTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChangeTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChange_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChange_netTests.csproj index 765901574..544b5fcd0 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChange_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChange_netTests.csproj @@ -7,8 +7,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 2419eba34b2a1a8a349340ed1c1802e460422d4f Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:37 +0100 Subject: [PATCH 056/597] MVVM_04a_CTRelayCommandTests --- .../MVVM_04a_CTRelayCommandTests.csproj | 4 ++-- .../MVVM_04a_CTRelayCommand_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommandTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommandTests.csproj index d0202ae6b..4088eae1c 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommandTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommandTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommand_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommand_netTests.csproj index 5966b9f38..47dc918ce 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommand_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommand_netTests.csproj @@ -7,8 +7,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From f19bb74a93c065c580a81192a0679b51789a1db9 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:40 +0100 Subject: [PATCH 057/597] MVVM_04_DelegateCommandTests --- .../MVVM_04_DelegateCommandTests.csproj | 4 ++-- .../MVVM_04_DelegateCommand_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommandTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommandTests.csproj index 3286c229a..720a135d4 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommandTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommandTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommand_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommand_netTests.csproj index 81773d423..469d9285e 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommand_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommand_netTests.csproj @@ -7,8 +7,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 71c15f6dd272e149dc2cfce6279d4d9ca35435ff Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:40 +0100 Subject: [PATCH 058/597] MVVM_05a_CTCommandParCalc --- .../MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc.csproj | 2 +- .../MVVM_05a_CTCommandParCalc_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc.csproj b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc.csproj index 891802cde..837c1e004 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc.csproj @@ -17,7 +17,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc_net.csproj index 2d65b76a3..30b29dc26 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc_net.csproj @@ -20,7 +20,7 @@ - + From 958ad17f94aeba957cf677465b3b5dd858e02527 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:40 +0100 Subject: [PATCH 059/597] MVVM_05a_CTCommandParCalcTests --- .../MVVM_05a_CTCommandParCalcTests.csproj | 4 ++-- .../MVVM_05a_CTCommandParCalc_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalcTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalcTests.csproj index 849092317..59211048f 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalcTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalcTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalc_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalc_netTests.csproj index 392097cd4..d2f600e3b 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalc_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalc_netTests.csproj @@ -7,8 +7,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 316273a828c1dd6a93c195b87e121a28d57eb670 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:42 +0100 Subject: [PATCH 060/597] MVVM_05_CommandParCalculatorTests --- .../MVVM_05_CommandParCalculatorTests.csproj | 4 ++-- .../MVVM_05_CommandParCalculator_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculatorTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculatorTests.csproj index 74dd70d0b..ed128af49 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculatorTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculatorTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculator_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculator_netTests.csproj index 0292ab95f..aadc3b05a 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculator_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculator_netTests.csproj @@ -7,8 +7,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From ff1cc48264229fbb6473f150baf204129d0f8ee0 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:45 +0100 Subject: [PATCH 061/597] MVVM_06_ConvertersTests --- .../MVVM_06_ConvertersTests/MVVM_06_ConvertersTests.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_ConvertersTests/MVVM_06_ConvertersTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_ConvertersTests/MVVM_06_ConvertersTests.csproj index eb2939119..6d4bb929d 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_06_ConvertersTests/MVVM_06_ConvertersTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_06_ConvertersTests/MVVM_06_ConvertersTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From d2ced246627b9cd6d65ce201735af9bca365d693 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:49 +0100 Subject: [PATCH 062/597] MVVM_06_Converters_3Tests --- .../MVVM_06_Converters_3Tests.csproj | 4 ++-- .../MVVM_06_Converters_3_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3Tests.csproj index f8189f8ad..d9afd6726 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3Tests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3Tests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3_netTests.csproj index d741d59c9..c8d006cdd 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3_netTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 4a63e8e67d5fa58b122e32c13adfb5ed31548538 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:49 +0100 Subject: [PATCH 063/597] MVVM_06_Converters_4 --- .../MVVM_06_Converters_4/MVVM_06_Converters_4.csproj | 2 +- .../MVVM_06_Converters_4/MVVM_06_Converters_4_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4.csproj index 8b8236095..4822c16ab 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4.csproj @@ -8,7 +8,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4_net.csproj index 1cc35b2e7..2b81c526b 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4_net.csproj @@ -14,7 +14,7 @@ - + From 9a6bd9c1611de03e3f7907dee3b7ac42ad97fae2 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:50 +0100 Subject: [PATCH 064/597] MVVM_06_Converters_4Tests --- .../MVVM_06_Converters_4Tests.csproj | 4 ++-- .../MVVM_06_Converters_4_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4Tests.csproj index d1d163a2e..ba08f03df 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4Tests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4Tests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4_netTests.csproj index 9c7de1dd6..541386a0a 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4_netTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 6eac1edaa52ca20cc6cd98d714094acfdd9dd76d Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:52 +0100 Subject: [PATCH 065/597] MVVM_09a_CTDialogBoxesTests --- .../MVVM_09a_CTDialogBoxesTests.csproj | 4 ++-- .../MVVM_09a_CTDialogBoxes_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxesTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxesTests.csproj index 88195f5d0..b30706aa2 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxesTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxesTests.csproj @@ -10,8 +10,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxes_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxes_netTests.csproj index cf3b5bedd..e76f8fc45 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxes_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxes_netTests.csproj @@ -10,8 +10,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From f6ecf385ec2f7953bfc1c055bc4cb6dfde4e2ba7 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:54 +0100 Subject: [PATCH 066/597] MVVM_09_DialogBoxesTest --- .../MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxesTest.csproj | 4 ++-- .../MVVM_09_DialogBoxes_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxesTest.csproj b/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxesTest.csproj index 8925c86db..bebfef9d2 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxesTest.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxesTest.csproj @@ -10,8 +10,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxes_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxes_netTests.csproj index 56bc0c109..78aef51f7 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxes_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxes_netTests.csproj @@ -10,8 +10,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From d3d6f432af0ea61c3b62cf156cb9820bc4e7e29a Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:25:56 +0100 Subject: [PATCH 067/597] MVVM_16_UserControl1Tests --- .../MVVM_16_UserControl1Tests.csproj | 4 ++-- .../MVVM_16_UserControl1_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1Tests.csproj index 2b087cade..b23ad4ea9 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1Tests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1Tests.csproj @@ -11,8 +11,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1_netTests.csproj index 47518257f..fa0e6af12 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1_netTests.csproj @@ -11,8 +11,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 0cd6453779e2ba76a6626d22b53ddbd1ba5f0027 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:03 +0100 Subject: [PATCH 068/597] MVVM_18_MultiConvertersTests --- .../MVVM_18_MultiConvertersTests.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_18_MultiConvertersTests/MVVM_18_MultiConvertersTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_18_MultiConvertersTests/MVVM_18_MultiConvertersTests.csproj index 0d9985abb..93bb12cb7 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_18_MultiConvertersTests/MVVM_18_MultiConvertersTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_18_MultiConvertersTests/MVVM_18_MultiConvertersTests.csproj @@ -17,8 +17,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 0db616dd94b14a9972ae8b4e5d57fca1f443002e Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:05 +0100 Subject: [PATCH 069/597] MVVM_19_FilterListsTests --- .../MVVM_19_FilterListsTests/MVVM_19_FilterListsTests.csproj | 4 ++-- .../MVVM_19_FilterLists_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterListsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterListsTests.csproj index 786545b49..a3997c9a5 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterListsTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterListsTests.csproj @@ -26,8 +26,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterLists_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterLists_netTests.csproj index 88004cffd..c90822134 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterLists_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterLists_netTests.csproj @@ -18,8 +18,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 14bf1f3dc16e6568bc88d2c00ce4f27ecaf26059 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:08 +0100 Subject: [PATCH 070/597] MVVM_20a_CTSysdialogsTests --- .../MVVM_20a_CTSysdialogsTests.csproj | 4 ++-- .../MVVM_20a_CTSysdialogs_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogsTests.csproj index 2541adc6b..9819b5909 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogsTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogsTests.csproj @@ -14,8 +14,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogs_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogs_netTests.csproj index 285c7a279..cccc5a195 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogs_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogs_netTests.csproj @@ -13,8 +13,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From fb58b4b89cad06a435b1719737d474bc48055013 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:10 +0100 Subject: [PATCH 071/597] MVVM_20_SysdialogsTests --- .../MVVM_20_SysdialogsTests/MVVM_20_SysdialogsTests.csproj | 4 ++-- .../MVVM_20_Sysdialogs_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_SysdialogsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_SysdialogsTests.csproj index a2951d096..3c372c74a 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_SysdialogsTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_SysdialogsTests.csproj @@ -14,8 +14,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_Sysdialogs_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_Sysdialogs_netTests.csproj index 3075a17c2..8a785564f 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_Sysdialogs_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_Sysdialogs_netTests.csproj @@ -13,8 +13,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From efba26e307739f63a185743addbcede9f95537e4 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:12 +0100 Subject: [PATCH 072/597] MVVM_22_CTWpfCap --- .../MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap.csproj | 2 +- .../MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap.csproj index ff835e6b8..d9a2e063b 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap.csproj @@ -22,7 +22,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap_net.csproj index c122aec87..97f36db14 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap_net.csproj @@ -19,7 +19,7 @@ - + From 99b477414ad40a3795d48f55884775d69692c3c2 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:12 +0100 Subject: [PATCH 073/597] MVVM_22_CTWpfCapTests --- .../MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCapTests.csproj | 4 ++-- .../MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCap_netTests.csproj | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCapTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCapTests.csproj index 689da0a96..1ea1d3192 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCapTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCapTests.csproj @@ -21,8 +21,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCap_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCap_netTests.csproj index 668275c15..404fe66f2 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCap_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCap_netTests.csproj @@ -21,14 +21,14 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + From 75da15291fdf462d7e53a928d938a91541a49516 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:13 +0100 Subject: [PATCH 074/597] MVVM_22_WpfCap --- CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap.csproj | 2 +- .../MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap.csproj index bf110cca7..680f42f57 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap.csproj @@ -22,7 +22,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap_net.csproj index a07ad4aa8..f180da863 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap_net.csproj @@ -19,7 +19,7 @@ - + From 5e537481751cac1d2800db4994273aaf7c0dc588 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:13 +0100 Subject: [PATCH 075/597] MVVM_22_WpfCapTests --- .../MVVM_22_WpfCapTests/MVVM_22_WpfCapTests.csproj | 4 ++-- .../MVVM_22_WpfCapTests/MVVM_22_WpfCap_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCapTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCapTests.csproj index b67257594..4159f7ccc 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCapTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCapTests.csproj @@ -21,8 +21,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCap_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCap_netTests.csproj index e416aca77..848176e68 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCap_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCap_netTests.csproj @@ -21,8 +21,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 1b86e0512d2a30750aa121087ade3f3fbe2a6cc3 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:15 +0100 Subject: [PATCH 076/597] MVVM_24a_CTUserControlTests --- .../MVVM_24a_CTUserControlTests.csproj | 4 ++-- .../MVVM_24a_CTUserControl_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControlTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControlTests.csproj index 5ba9b4bfd..2139c8849 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControlTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControlTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControl_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControl_netTests.csproj index a3b967a4d..500771ec2 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControl_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControl_netTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 45d673e427411b98c0dd0b29bc8c068167e9e6bf Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:18 +0100 Subject: [PATCH 077/597] MVVM_24b_UserControlTests --- .../MVVM_24b_UserControlTests.csproj | 4 ++-- .../MVVM_24b_UserControl_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControlTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControlTests.csproj index 23486d336..f12811255 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControlTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControlTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControl_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControl_netTests.csproj index d45389f90..ec3660777 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControl_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControl_netTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 4ea01a3c766a4a91ce207927070fc0710bd6c555 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:20 +0100 Subject: [PATCH 078/597] MVVM_24c_CTUserControlTests --- .../MVVM_24c_CTUserControlTests.csproj | 4 ++-- .../MVVM_24c_CTUserControl_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControlTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControlTests.csproj index 050a1c2df..a3c178ade 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControlTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControlTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControl_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControl_netTests.csproj index 70b80232b..6e16fb86f 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControl_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControl_netTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From fc2a81a3bd001d0484b53e4861e5c1d50e644eeb Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:22 +0100 Subject: [PATCH 079/597] MVVM_24_UserControlTests --- .../MVVM_24_UserControlTests/MVVM_24_UserControlTests.csproj | 4 ++-- .../MVVM_24_UserControl_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControlTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControlTests.csproj index b627525df..12f2d7ccc 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControlTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControlTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControl_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControl_netTests.csproj index 94b96f117..4e30e942d 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControl_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControl_netTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 40c6bf290a67be8279ba3a556caf958746ec2002 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:22 +0100 Subject: [PATCH 080/597] MVVM_25_RichTextEdit --- .../MVVM_25_RichTextEdit/MVVM_25_RichTextEdit.csproj | 2 +- .../MVVM_25_RichTextEdit/MVVM_25_RichTextEdit_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit.csproj b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit.csproj index 4d8a76760..9d06f90d0 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit.csproj @@ -12,7 +12,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit_net.csproj index 1fbaf8d83..b9dea598b 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit_net.csproj @@ -11,7 +11,7 @@ - + From ffd2e7d229a6e7a8bd5d044a75c1054cfed60a1d Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:23 +0100 Subject: [PATCH 081/597] MVVM_25_RichTextEditTests --- .../MVVM_25_RichTextEditTests.csproj | 4 ++-- .../MVVM_25_RichTextEdit_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEditTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEditTests.csproj index ea7e1850e..95577d21b 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEditTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEditTests.csproj @@ -12,8 +12,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEdit_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEdit_netTests.csproj index 418a87e29..40b7dbce2 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEdit_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEdit_netTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 7df335bb456cf3d748f78405f695b48c770ee0a7 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:29 +0100 Subject: [PATCH 082/597] MVVM_27_DataGridTests --- .../MVVM_27_DataGridTests/MVVM_27_DataGridTests.csproj | 4 ++-- .../MVVM_27_DataGridTests/MVVM_27_DataGrid_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGridTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGridTests.csproj index 220f5d365..7168c8160 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGridTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGridTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGrid_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGrid_netTests.csproj index e6219033b..251bf2248 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGrid_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGrid_netTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 5addafa1a2dcc43d50fe60dc9026c007ad374206 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:30 +0100 Subject: [PATCH 083/597] MVVM_28_1_CTDataGridExt --- .../MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt.csproj | 2 +- .../MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt.csproj index b66d6adaa..9de8103c1 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt.csproj @@ -8,7 +8,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt_net.csproj index 2e3cb5216..6dcb66fc5 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt_net.csproj @@ -8,7 +8,7 @@ - + From 23b3bb72c9551b23e044421c8e194fcdd9836f80 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:30 +0100 Subject: [PATCH 084/597] MVVM_28_1_CTDataGridExtTests --- .../MVVM_28_1_CTDataGridExtTests.csproj | 4 ++-- .../MVVM_28_1_CTDataGridExt_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExtTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExtTests.csproj index 24963cb6b..ba30b0d73 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExtTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExtTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExt_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExt_netTests.csproj index 093af58f2..16c1bc50d 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExt_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExt_netTests.csproj @@ -7,8 +7,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 11be2572451a84d8282dbd208ab0516d0872f911 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:32 +0100 Subject: [PATCH 085/597] MVVM_28_1_DataGridExtTests --- .../MVVM_28_1_DataGridExtTests.csproj | 4 ++-- .../MVVM_28_1_DataGridExt_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExtTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExtTests.csproj index 11f739e33..1dc603e3d 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExtTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExtTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExt_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExt_netTests.csproj index 39c6e4d7a..b7e4ba5ec 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExt_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExt_netTests.csproj @@ -7,8 +7,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 68ecfe92328296d715a36c0135a2281de44ff005 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:34 +0100 Subject: [PATCH 086/597] MVVM_28_DataGridTests --- .../MVVM_28_DataGridTests/MVVM_28_DataGridTests.csproj | 4 ++-- .../MVVM_28_DataGridTests/MVVM_28_DataGrid_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGridTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGridTests.csproj index 6752be5f7..0edc15686 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGridTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGridTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGrid_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGrid_netTests.csproj index 4e01ee373..c6a54e982 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGrid_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGrid_netTests.csproj @@ -7,8 +7,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 7c73e8acf93d48f6b453bf68a36df97b2a7c536c Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:37 +0100 Subject: [PATCH 087/597] MVVM_31a_CTValidation1Tests --- .../MVVM_31a_CTValidation1Tests.csproj | 4 ++-- .../MVVM_31a_CTValidation1_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1Tests.csproj index 07cc0c518..47c86cdef 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1Tests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1Tests.csproj @@ -7,8 +7,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1_netTests.csproj index 16b535ad6..50ae95f33 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1_netTests.csproj @@ -7,8 +7,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From e92196bf8ee00b5c29fc7762b71bd9a493d07000 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:39 +0100 Subject: [PATCH 088/597] MVVM_31a_CTValidation2Tests --- .../MVVM_31a_CTValidation2Tests.csproj | 4 ++-- .../MVVM_31a_CTValidation2_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2Tests.csproj index f99585b0e..b6db9d3e4 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2Tests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2Tests.csproj @@ -7,8 +7,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2_netTests.csproj index 8f484a990..a3c0a2eaf 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2_netTests.csproj @@ -7,8 +7,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 5fa04bf63669af76de9330cb8cdf3763a5a0db73 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:41 +0100 Subject: [PATCH 089/597] MVVM_31a_CTValidation3Tests --- .../MVVM_31a_CTValidation3Tests.csproj | 4 ++-- .../MVVM_31a_CTValidation3_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3Tests.csproj index b30c12b1f..71253b930 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3Tests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3Tests.csproj @@ -7,8 +7,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3_netTests.csproj index 60366fea1..2321446ea 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3_netTests.csproj @@ -7,8 +7,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From a7066cc40947fad334b4045fd0c31a48950f0e6e Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:44 +0100 Subject: [PATCH 090/597] MVVM_31_Validation1Tests --- .../MVVM_31_Validation1Tests/MVVM_31_Validation1Tests.csproj | 4 ++-- .../MVVM_31_Validation1_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1Tests.csproj index 7d31545fb..424a3e532 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1Tests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1Tests.csproj @@ -7,8 +7,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1_netTests.csproj index 84280e279..70c93bedb 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1_netTests.csproj @@ -7,8 +7,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From efa780c5e8ef67b087dc0716f24924df7c23bc63 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:46 +0100 Subject: [PATCH 091/597] MVVM_31_Validation2Tests --- .../MVVM_31_Validation2Tests/MVVM_31_Validation2Tests.csproj | 4 ++-- .../MVVM_31_Validation2_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2Tests.csproj index 1029236ee..25a553ff0 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2Tests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2Tests.csproj @@ -7,8 +7,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2_netTests.csproj index 40157c4e4..041b831d6 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2_netTests.csproj @@ -7,8 +7,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From bf257ca7fc497ab04857409806a1c7a001ba5ea5 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:48 +0100 Subject: [PATCH 092/597] MVVM_33a_CTEvents_To_CommandsTests --- .../MVVM_33a_CTEvents_To_CommandsTests.csproj | 4 ++-- .../MVVM_33a_CTEvents_To_Commands_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_CommandsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_CommandsTests.csproj index a1cb6d901..eb685f48a 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_CommandsTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_CommandsTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_Commands_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_Commands_netTests.csproj index 8bfa32877..e5996c9e5 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_Commands_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_Commands_netTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 2b1f1a0c5ccf8ea37e7ca818d99bd11c71766eaa Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:51 +0100 Subject: [PATCH 093/597] MVVM_33_Events_to_CommandsTests --- .../MVVM_33_Events_to_CommandsTests.csproj | 4 ++-- .../MVVM_33_Events_to_Commands_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_CommandsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_CommandsTests.csproj index f18584383..24d08561d 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_CommandsTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_CommandsTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_Commands_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_Commands_netTests.csproj index c4c3bf899..69110c191 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_Commands_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_Commands_netTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From b9357b56fdd8e070e33e59fe383068676f1bf5e1 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:53 +0100 Subject: [PATCH 094/597] MVVM_34a_CTBindingEventArgsTests --- .../MVVM_34a_CTBindingEventArgsTests.csproj | 4 ++-- .../MVVM_34a_CTBindingEventArgs_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgsTests.csproj index eaf152693..9691804ce 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgsTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgsTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgs_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgs_netTests.csproj index d32306e5c..a1c49b583 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgs_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgs_netTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 413adb2f905e8ff6c11a68864dcf91ef9adf77ef Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:55 +0100 Subject: [PATCH 095/597] MVVM_34_BindingEventArgsTests --- .../MVVM_34_BindingEventArgsTests.csproj | 4 ++-- .../MVVM_34_BindingEventArgs_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgsTests.csproj index 6feee853b..62c2e2cd3 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgsTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgsTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgs_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgs_netTests.csproj index ccb0bcd80..f2b7b8471 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgs_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgs_netTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 201fb1b6f38634d4483ccfa8a7958c989e514ebb Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:58 +0100 Subject: [PATCH 096/597] MVVM_35_CommunityToolkitTests --- .../MVVM_35_CommunityToolkitTests.csproj | 4 ++-- .../MVVM_35_CommunityToolkit_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkitTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkitTests.csproj index a9511607e..2dd4473d8 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkitTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkitTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkit_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkit_netTests.csproj index a97c365b6..b88f5a440 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkit_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkit_netTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From ada308a9e1efc6dc8ff8f24de38967157113d708 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:58 +0100 Subject: [PATCH 097/597] MVVM_36_ComToolKtSavesWork --- .../MVVM_36_ComToolKtSavesWork.csproj | 2 +- .../MVVM_36_ComToolKtSavesWork_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork.csproj b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork.csproj index a61862468..f6613b70b 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork.csproj @@ -8,7 +8,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork_net.csproj index c3f5d8c8e..bb8023335 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork_net.csproj @@ -8,7 +8,7 @@ - + From ac8b8370edddfdfe8cead5ec00eab7545251df43 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:58 +0100 Subject: [PATCH 098/597] MVVM_36_ComToolKtSavesWorkTests --- .../MVVM_36_ComToolKtSavesWorkTests.csproj | 4 ++-- .../MVVM_36_ComToolKtSavesWork_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWorkTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWorkTests.csproj index 2405a37a3..f5fa918b2 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWorkTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWorkTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWork_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWork_netTests.csproj index 2d730bbf3..e1a2f9a0a 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWork_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWork_netTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From a0d7734df99af75b5ae8915b4dc3e78b23a98b4e Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:58 +0100 Subject: [PATCH 099/597] MVVM_37_TreeView --- .../MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView.csproj | 2 +- .../MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView.csproj b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView.csproj index 9bd7f3bf5..829540c19 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView.csproj @@ -12,7 +12,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView_net.csproj index dfb5e06bf..c89392a24 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView_net.csproj @@ -8,7 +8,7 @@ - + From 8ceb613cdf7d436259dfa4c06f4c713ff524cb60 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:59 +0100 Subject: [PATCH 100/597] MVVM_37_TreeViewTests --- .../MVVM_37_TreeViewTests/MVVM_37_TreeViewTests.csproj | 4 ++-- .../MVVM_37_TreeViewTests/MVVM_37_TreeView_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeViewTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeViewTests.csproj index a1987a464..55693ff25 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeViewTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeViewTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeView_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeView_netTests.csproj index c168d9541..aea538ab2 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeView_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeView_netTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 4bd854883a867920f532517d77a34dfdc644b629 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:59 +0100 Subject: [PATCH 101/597] MVVM_38_CTDependencyInjection --- .../MVVM_38_CTDependencyInjection.csproj | 2 +- .../MVVM_38_CTDependencyInjection_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection.csproj b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection.csproj index 9e243068e..e6405f28b 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection.csproj @@ -8,7 +8,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection_net.csproj index 26278ba8d..6149fad50 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection_net.csproj @@ -8,7 +8,7 @@ - + From fbe24bb3264e9692f01f2c46eac4162a5d0130ad Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:59 +0100 Subject: [PATCH 102/597] MVVM_38_CTDependencyInjectionTests --- .../MVVM_38_CTDependencyInjectionTests.csproj | 4 ++-- .../MVVM_38_CTDependencyInjection_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjectionTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjectionTests.csproj index 807015675..8362eebe9 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjectionTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjectionTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjection_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjection_netTests.csproj index 8215d8c66..bb48a3f20 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjection_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjection_netTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 44a39881bc386ad9f4508f9715977d895b1aad44 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:26:59 +0100 Subject: [PATCH 103/597] MVVM_39_MultiModelTest --- .../MVVM_39_MultiModelTest/MVVM_39_MultiModelTest.csproj | 2 +- .../MVVM_39_MultiModelTest/MVVM_39_MultiModelTest_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest.csproj b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest.csproj index 1c4967f27..0a52edc44 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest.csproj @@ -8,7 +8,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest_net.csproj index 9c8b927e9..cc6ef8ff7 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest_net.csproj @@ -8,7 +8,7 @@ - + From 314cbe2945d7daf84534a1ec0d710f2614687078 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:27:00 +0100 Subject: [PATCH 104/597] MVVM_39_MultiModelTestTests --- .../MVVM_39_MultiModelTestTests.csproj | 4 ++-- .../MVVM_39_MultiModelTest_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTestTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTestTests.csproj index 6f69ac0ca..2c95ba9a5 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTestTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTestTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTest_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTest_netTests.csproj index fa0e31bc4..d619de8a1 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTest_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTest_netTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 92a78dce1bed12fafaadc75c794baf4b5555056e Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:27:00 +0100 Subject: [PATCH 105/597] MVVM_40_Wizzard --- .../MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard.csproj | 2 +- .../MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard.csproj b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard.csproj index 2b70d6e58..997f3eacd 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard.csproj @@ -20,7 +20,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard_net.csproj index f5d71e3c3..a421f5a10 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard_net.csproj @@ -16,7 +16,7 @@ - + From a52aac835df8d17dd7cfbaa872eeb7943cdf4d29 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:27:00 +0100 Subject: [PATCH 106/597] MVVM_40_WizzardTests --- .../MVVM_40_WizzardTests/MVVM_40_WizzardTests.csproj | 4 ++-- .../MVVM_40_WizzardTests/MVVM_40_Wizzard_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_WizzardTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_WizzardTests.csproj index 5973c68f6..b9303a2d6 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_WizzardTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_WizzardTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_Wizzard_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_Wizzard_netTests.csproj index d09e345c2..acc778ad0 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_Wizzard_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_Wizzard_netTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From e0c0b91c6716f9f6c215db250f12b61ee93b0d1d Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:27:00 +0100 Subject: [PATCH 107/597] MVVM_41_Sudoku --- CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku.csproj | 2 +- .../MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku.csproj b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku.csproj index 89995937a..8e1bfc64d 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku.csproj @@ -11,7 +11,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku_net.csproj index 92892d170..b359a7562 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku_net.csproj @@ -13,7 +13,7 @@ - + From 33639bc204f9a6fbe03e476650451ebbb027d3b9 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:27:01 +0100 Subject: [PATCH 108/597] MVVM_41_SudokuTests --- .../MVVM_41_SudokuTests/MVVM_41_SudokuTests.csproj | 4 ++-- .../MVVM_41_SudokuTests/MVVM_41_Sudoku_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_SudokuTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_SudokuTests.csproj index 4cfa814a6..29135105e 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_SudokuTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_SudokuTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_Sudoku_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_Sudoku_netTests.csproj index 3aa9836da..208caeb7f 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_Sudoku_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_Sudoku_netTests.csproj @@ -10,8 +10,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From c3de7b384a6c7ea7d2332b1b9714e44e1b082d14 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:27:01 +0100 Subject: [PATCH 109/597] MVVM_99_SomeIssue --- .../MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue.csproj | 2 +- .../MVVM_99_SomeIssue/MVVM_99_SomeIssue_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue.csproj b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue.csproj index 9e243068e..e6405f28b 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue.csproj @@ -8,7 +8,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue_net.csproj index 780795add..fb6cc840b 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue_net.csproj @@ -8,7 +8,7 @@ - + From 08152bc0c591e59dcfa389000a8caca12b3275c3 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:27:01 +0100 Subject: [PATCH 110/597] MVVM_99_SomeIssueTests --- .../MVVM_99_SomeIssueTests/MVVM_99_SomeIssueTests.csproj | 4 ++-- .../MVVM_99_SomeIssueTests/MVVM_99_SomeIssue_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssueTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssueTests.csproj index 07330f517..2b1525f20 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssueTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssueTests.csproj @@ -12,8 +12,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssue_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssue_netTests.csproj index 98ea68a20..ad3f8df0e 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssue_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssue_netTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 000e0c2c25c4578a6487fa0cd03b41d9ffec2b87 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:27:01 +0100 Subject: [PATCH 111/597] MVVM_AllExamples --- .../MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples_net.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples_net.csproj index 0e84a38ea..a4bbbda3e 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples_net.csproj @@ -8,7 +8,7 @@ - + From f715fd76dc1b8d6ffb865e8d7095f02052dc26ae Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:27:02 +0100 Subject: [PATCH 112/597] MVVM_AllExamplesTests --- .../MVVM_AllExamplesTests/MVVM_AllExamplesTests.csproj | 4 ++-- .../MVVM_AllExamplesTests/MVVM_AllExamples_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamplesTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamplesTests.csproj index 8618b808f..559fa4764 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamplesTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamplesTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamples_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamples_netTests.csproj index cc444cffd..59b5d8566 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamples_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamples_netTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 978ed7f9982f6ea78ab3028a4fa68d72f5b49f2b Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:27:08 +0100 Subject: [PATCH 113/597] WpfAppTests --- CSharpBible/MVVM_Tutorial/WpfAppTests/WpfAppTests.csproj | 4 ++-- CSharpBible/MVVM_Tutorial/WpfAppTests/WpfApp_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfAppTests.csproj b/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfAppTests.csproj index fccc5f70e..1ff84c892 100644 --- a/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfAppTests.csproj +++ b/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfAppTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfApp_netTests.csproj b/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfApp_netTests.csproj index 2c358fd3a..7b774509e 100644 --- a/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfApp_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfApp_netTests.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From aeafe4600a5761d87c08086ed70946842d3a291c Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 06:29:24 +0100 Subject: [PATCH 114/597] CSharpBible --- CSharpBible/Data/Data.sln | 15 +++++++++++++++ CSharpBible/Libraries/Libraries_net.props | 1 + 2 files changed, 16 insertions(+) diff --git a/CSharpBible/Data/Data.sln b/CSharpBible/Data/Data.sln index b6b61eb18..a5e22fdd2 100644 --- a/CSharpBible/Data/Data.sln +++ b/CSharpBible/Data/Data.sln @@ -70,6 +70,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PictureDB.OllamaTest", "Pic EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PictureDB.UI", "PictureDB\PictureDB.UI\PictureDB.UI.csproj", "{BFCB4F4A-F6A3-EB13-DB02-B0C1979AFDEA}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommonDialogs_net", "..\Libraries\CommonDialogs\CommonDialogs_net.csproj", "{65F08D9B-F63E-14C2-C35D-C324E1E37785}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -368,6 +370,18 @@ Global {BFCB4F4A-F6A3-EB13-DB02-B0C1979AFDEA}.Release|x64.Build.0 = Release|Any CPU {BFCB4F4A-F6A3-EB13-DB02-B0C1979AFDEA}.Release|x86.ActiveCfg = Release|Any CPU {BFCB4F4A-F6A3-EB13-DB02-B0C1979AFDEA}.Release|x86.Build.0 = Release|Any CPU + {65F08D9B-F63E-14C2-C35D-C324E1E37785}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {65F08D9B-F63E-14C2-C35D-C324E1E37785}.Debug|Any CPU.Build.0 = Debug|Any CPU + {65F08D9B-F63E-14C2-C35D-C324E1E37785}.Debug|x64.ActiveCfg = Debug|Any CPU + {65F08D9B-F63E-14C2-C35D-C324E1E37785}.Debug|x64.Build.0 = Debug|Any CPU + {65F08D9B-F63E-14C2-C35D-C324E1E37785}.Debug|x86.ActiveCfg = Debug|x86 + {65F08D9B-F63E-14C2-C35D-C324E1E37785}.Debug|x86.Build.0 = Debug|x86 + {65F08D9B-F63E-14C2-C35D-C324E1E37785}.Release|Any CPU.ActiveCfg = Release|Any CPU + {65F08D9B-F63E-14C2-C35D-C324E1E37785}.Release|Any CPU.Build.0 = Release|Any CPU + {65F08D9B-F63E-14C2-C35D-C324E1E37785}.Release|x64.ActiveCfg = Release|Any CPU + {65F08D9B-F63E-14C2-C35D-C324E1E37785}.Release|x64.Build.0 = Release|Any CPU + {65F08D9B-F63E-14C2-C35D-C324E1E37785}.Release|x86.ActiveCfg = Release|x86 + {65F08D9B-F63E-14C2-C35D-C324E1E37785}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -395,6 +409,7 @@ Global {2780B100-CAB5-4C83-B158-ED7C737944B0} = {3C73C616-12F2-478C-9CAC-823780861BCD} {42156DBB-5FC0-3FE1-FC43-55400E7FDFAD} = {3C73C616-12F2-478C-9CAC-823780861BCD} {BFCB4F4A-F6A3-EB13-DB02-B0C1979AFDEA} = {3C73C616-12F2-478C-9CAC-823780861BCD} + {65F08D9B-F63E-14C2-C35D-C324E1E37785} = {51F6C20B-003C-430C-BED7-2A89F834E4C0} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {128BE64A-28F5-47C5-A045-2352EF09BFBB} diff --git a/CSharpBible/Libraries/Libraries_net.props b/CSharpBible/Libraries/Libraries_net.props index 80db63fcd..7fae629d2 100644 --- a/CSharpBible/Libraries/Libraries_net.props +++ b/CSharpBible/Libraries/Libraries_net.props @@ -8,6 +8,7 @@ enable disable true + true JC-Soft Joe Care Copyright © JC-Soft 2025 From fe7168183608a466900e0dccdc9229ebec40ca0d Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 14 Nov 2025 10:15:29 +0100 Subject: [PATCH 115/597] AboutEx --- CSharpBible/AboutEx/AboutEx.csproj | 2 +- .../ConsoleApp1/DynamicStateMachine.csproj | 11 + .../Data/ConsoleApp1/ExampleActions.cs | 87 + CSharpBible/Data/ConsoleApp1/IAction.cs | 8 + .../Data/ConsoleApp1/IStatePredicate.cs | 7 + CSharpBible/Data/ConsoleApp1/Program.cs | 17 + .../Data/ConsoleApp1/SimulationEngine.cs | 114 + CSharpBible/Data/ConsoleApp1/StateContext.cs | 24 + CSharpBible/Data/ConsoleApp1/StateMachine.cs | 102 + .../Data/ConsoleApp1/StepDefinition.cs | 11 + CSharpBible/Data/ConsoleApp1/Transaction.cs | 12 + CSharpBible/MVVM_Tutorial/.info | 1 + .../MVVM_Tutorial/DemoLibrary/DataAccess.cs | 160 + .../DemoLibrary/DemoLibrary.csproj | 19 + .../DemoLibrary/Models/AddressModel.cs | 69 + .../DemoLibrary/Models/Models.cd | 24 + .../DemoLibrary/Models/PersonModel.cs | 79 + .../DemoLibraryTests/DataAccessTests.cs | 57 + .../Models/AddressModelTests.cs | 70 + .../Models/PersonModelTests.cs | 57 + .../MVVM_Tutorial/ItemsControlTut1/App.xaml | 9 + .../ItemsControlTut1/App.xaml.cs | 24 + .../ItemsControlTut1/AssemblyInfo.cs | 23 + .../ItemsControlTut1/ItemsControlTut1.csproj | 40 + .../ItemsControlTut1/View/MainWindow.xaml | 19 + .../ItemsControlTut1/View/MainWindow.xaml.cs | 31 + .../ItemsControlTut1/ViewModels/.info | 1 + .../MVVM_Tutorial/ItemsControlTut2/App.xaml | 9 + .../ItemsControlTut2/App.xaml.cs | 24 + .../ItemsControlTut2/AssemblyInfo.cs | 23 + .../ItemsControlTut2/ItemsControlTut2.csproj | 36 + .../ItemsControlTut2/View/MainWindow.xaml | 34 + .../ItemsControlTut2/View/MainWindow.xaml.cs | 56 + .../ItemsControlTut2/ViewModels/.info | 1 + .../MVVM_Tutorial/ItemsControlTut3/App.xaml | 9 + .../ItemsControlTut3/App.xaml.cs | 24 + .../ItemsControlTut3/AssemblyInfo.cs | 23 + .../ItemsControlTut3/ItemsControlTut3.csproj | 35 + .../ItemsControlTut3_net.csproj | 30 + .../ItemsControlTut3/View/MainWindow.xaml | 61 + .../ItemsControlTut3/View/MainWindow.xaml.cs | 32 + .../ViewModels/MainWindowViewModel.cs | 147 + .../ItemsControlTut3/ViewModels/ViewModel.cd | 21 + .../MainWindowTests.cs | 46 + .../ViewModels/MainWindowViewModelTests.cs | 226 + .../MVVM_Tutorial/ItemsControlTut4/App.xaml | 9 + .../ItemsControlTut4/App.xaml.cs | 24 + .../ItemsControlTut4/AssemblyInfo.cs | 23 + .../ItemsControlTut4/ItemsControlTut4.csproj | 34 + .../ItemsControlTut4_net.csproj | 31 + .../ItemsControlTut4/View/MainWindow.xaml | 43 + .../ItemsControlTut4/View/MainWindow.xaml.cs | 32 + .../ViewModels/MainWindowViewModel.cs | 148 + .../ItemsControlTut4/ViewModels/ViewModel.cd | 21 + .../MainWindowTests.cs | 46 + .../ViewModels/MainWindowViewModelTests.cs | 377 + .../MVVM_Tutorial/ListBinding/App.config | 26 + .../MVVM_Tutorial/ListBinding/App.xaml | 10 + .../MVVM_Tutorial/ListBinding/App.xaml.cs | 24 + .../ListBinding/ListBinding.csproj | 48 + .../ListBinding/ListBinding_net.csproj | 56 + .../ListBinding/Model/IPersons.cs | 9 + .../MVVM_Tutorial/ListBinding/Model/Person.cs | 133 + .../ListBinding/Model/Persons.cs | 68 + .../Properties/Resources.Designer.cs | 63 + .../ListBinding/Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 46 + .../ListBinding/Properties/Settings.settings | 17 + .../ListBinding/View/MainWindow.xaml | 13 + .../ListBinding/View/MainWindow.xaml.cs | 31 + .../ListBinding/View/PersonView.xaml | 103 + .../ListBinding/View/PersonView.xaml.cs | 42 + .../ViewModels/MainWindowViewModel.cs | 26 + .../ViewModels/PersonViewViewModel.cs | 92 + .../ListBindingTests/Model/PersonTests.cs | 323 + .../ListBindingTests/Properties/.info | 0 .../ListBindingTests/View/MainWindowTests.cs | 46 + .../ListBindingTests/View/PersonViewTests.cs | 46 + .../ViewModels/PersonViewViewModelTests.cs | 37 + .../ListBindingTests/packages.config | 4 + CSharpBible/MVVM_Tutorial/MVVM_00_Empty.sln | 45 + .../MVVM_Tutorial/MVVM_00_IoCTemplate.sln | 67 + .../MVVM_00_IoCTemplate/App.xaml | 9 + .../MVVM_00_IoCTemplate/App.xaml.cs | 43 + .../MVVM_00_IoCTemplate/AssemblyInfo.cs | 10 + .../MVVM_00_IoCTemplate/MainWindow.xaml | 33 + .../MVVM_00_IoCTemplate/MainWindow.xaml.cs | 30 + .../MVVM_00_IoCTemplate/Models/.info | 1 + .../Models/ITemplateModel.cs | 40 + .../MVVM_00_IoCTemplate/Models/SimpleLog.cs | 30 + .../Models/TemplateModel.cs | 83 + .../Properties/Resources.Designer.cs | 118 + .../Properties/Resources.resx | 133 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../MVVM_00_IoCTemplate/ValueConverters/.info | 1 + .../ValueConverters/DateTimeValueConverter.cs | 62 + .../MVVM_00_IoCTemplate/ViewModels/.info | 1 + .../ViewModels/MainWindowViewModel.cs | 46 + .../ViewModels/TemplateViewModel.cs | 55 + .../MVVM_00_IoCTemplate/Views/.info | 1 + .../Views/TemplateView.xaml | 27 + .../Views/TemplateView.xaml.cs | 14 + .../MVVM_00_IoCTemplateTests/AppTests.cs | 64 + .../Models/SimpleLogTests.cs | 65 + .../Models/TemplateModelTests.cs | 72 + .../Properties/SettingsTests.cs | 70 + .../DateTimeValueConverterTests.cs | 72 + .../ViewModels/MainWindowViewModelTests.cs | 57 + .../ViewModels/TemplateViewModelTests.cs | 79 + .../Views/MainWindowTests.cs | 61 + .../Views/TemplateViewTests.cs | 61 + .../MVVM_Tutorial/MVVM_00_Template/App.xaml | 9 + .../MVVM_00_Template/App.xaml.cs | 27 + .../MVVM_00_Template/AssemblyInfo.cs | 10 + .../MVVM_00_Template/MVVM_00_Template.csproj | 37 + .../MVVM_00_Template_net.csproj | 37 + .../MVVM_00_Template/MainWindow.xaml | 31 + .../MVVM_00_Template/MainWindow.xaml.cs | 30 + .../MVVM_00_Template/Models/.info | 1 + .../Properties/Resources.Designer.cs | 118 + .../Properties/Resources.resx | 133 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../MVVM_00_Template/ValueConverters/.info | 1 + .../ValueConverters/DateTimeValueConverter.cs | 62 + .../MVVM_00_Template/ViewModels/.info | 1 + .../ViewModels/MainWindowViewModel.cs | 46 + .../ViewModels/TemplateViewModel.cs | 54 + .../MVVM_00_Template/Views/.info | 1 + .../MVVM_00_Template/Views/TemplateView.xaml | 27 + .../Views/TemplateView.xaml.cs | 14 + .../Properties/SettingsTests.cs | 70 + .../DateTimeValueConverterTests.cs | 72 + .../ViewModels/MainWindowViewModelTests.cs | 65 + .../ViewModels/TemplateViewModelTests.cs | 65 + .../Views/MainWindowTests.cs | 61 + .../Views/TemplateViewTests.cs | 61 + .../MVVM_Tutorial/MVVM_00a_CTTemplate.sln | 67 + .../MVVM_00a_CTTemplate/App.xaml | 9 + .../MVVM_00a_CTTemplate/App.xaml.cs | 27 + .../MVVM_00a_CTTemplate/AssemblyInfo.cs | 10 + .../MVVM_00a_CTTemplate.csproj | 37 + .../MVVM_00a_CTTemplate_net.csproj | 37 + .../MVVM_00a_CTTemplate/MainWindow.xaml | 33 + .../MVVM_00a_CTTemplate/MainWindow.xaml.cs | 30 + .../MVVM_00a_CTTemplate/Models/.info | 1 + .../Models/ITemplateModel.cs | 40 + .../Models/TemplateModel.cs | 77 + .../Properties/Resources.Designer.cs | 118 + .../Properties/Resources.resx | 133 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../MVVM_00a_CTTemplate/ValueConverters/.info | 1 + .../ValueConverters/DateTimeValueConverter.cs | 62 + .../MVVM_00a_CTTemplate/ViewModels/.info | 1 + .../ViewModels/MainWindowViewModel.cs | 46 + .../ViewModels/TemplateViewModel.cs | 56 + .../MVVM_00a_CTTemplate/Views/.info | 1 + .../Views/TemplateView.xaml | 27 + .../Views/TemplateView.xaml.cs | 14 + .../MVVM_00a_CTTemplateTests/AppTests.cs | 56 + .../Models/TemplateModelTests.cs | 66 + .../Properties/SettingsTests.cs | 70 + .../DateTimeValueConverterTests.cs | 72 + .../ViewModels/MainWindowViewModelTests.cs | 65 + .../ViewModels/TemplateViewModelTests.cs | 65 + .../Views/MainWindowTests.cs | 61 + .../Views/TemplateViewTests.cs | 61 + .../MVVM_03_NotifyChange/App.config | 6 + .../MVVM_03_NotifyChange/App.xaml | 9 + .../MVVM_03_NotifyChange/App.xaml.cs | 23 + .../MVVM_03_NotifyChange/AssemblyInfo.cs | 10 + .../MVVM_03_NotifyChange.csproj | 47 + .../MVVM_03_NotifyChange_net.csproj | 47 + .../MVVM_03_NotifyChange/MainWindow.xaml | 33 + .../MVVM_03_NotifyChange/MainWindow.xaml.cs | 30 + .../Properties/AssemblyInfo.cs | 68 + .../Properties/Resources.Designer.cs | 145 + .../Properties/Resources.de.resx | 139 + .../Properties/Resources.resx | 142 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../ViewModels/MainWindowViewModel.cs | 32 + .../ViewModels/NotifyChangeViewModel.cs | 26 + .../MVVM_03_NotifyChange/Views/.info | 1 + .../Views/NotifyChangeView.xaml | 39 + .../Views/NotifyChangeView.xaml.cs | 14 + .../Properties/SettingsTests.cs | 33 + .../ViewModels/MainWindowViewModelTests.cs | 65 + .../ViewModels/NotifyChangeViewModelTests.cs | 75 + .../Views/MainWindowTests.cs | 20 + .../Views/NotifyChangeViewTests.cs | 33 + .../MVVM_03a_CTNotifyChange/App.config | 6 + .../MVVM_03a_CTNotifyChange/App.xaml | 9 + .../MVVM_03a_CTNotifyChange/App.xaml.cs | 23 + .../MVVM_03a_CTNotifyChange/AssemblyInfo.cs | 10 + .../MVVM_03a_CTNotifyChange.csproj | 47 + .../MVVM_03a_CTNotifyChange_net.csproj | 47 + .../MVVM_03a_CTNotifyChange/MainWindow.xaml | 18 + .../MainWindow.xaml.cs | 30 + .../Properties/AssemblyInfo.cs | 68 + .../Properties/Resources.Designer.cs | 62 + .../Properties/Resources.resx | 101 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../ViewModels/MainWindowViewModel.cs | 32 + .../ViewModels/NotifyChangeViewModel.cs | 28 + .../MVVM_03a_CTNotifyChange/Views/.info | 1 + .../Views/NotifyChangeView.xaml | 19 + .../Views/NotifyChangeView.xaml.cs | 14 + .../Properties/SettingsTests.cs | 33 + .../ViewModels/MainWindowViewModelTests.cs | 67 + .../ViewModels/NotifyChangeViewModelTests.cs | 141 + .../Views/MainWindowTests.cs | 20 + .../Views/NotifyChangeViewTests.cs | 33 + .../MVVM_04_DelegateCommand/App.config | 6 + .../MVVM_04_DelegateCommand/App.xaml | 9 + .../MVVM_04_DelegateCommand/App.xaml.cs | 23 + .../MVVM_04_DelegateCommand/AssemblyInfo.cs | 10 + .../MVVM_04_DelegateCommand.csproj | 47 + .../MVVM_04_DelegateCommand_net.csproj | 47 + .../MVVM_04_DelegateCommand/MainWindow.xaml | 18 + .../MainWindow.xaml.cs | 30 + .../Properties/AssemblyInfo.cs | 68 + .../Properties/Resources.Designer.cs | 145 + .../Properties/Resources.resx | 142 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../ViewModels/DelegateCommandViewModel.cs | 33 + .../ViewModels/MainWindowViewModel.cs | 32 + .../MVVM_04_DelegateCommand/Views/.info | 1 + .../Views/DelegateCommandView.xaml | 41 + .../Views/DelegateCommandView.xaml.cs | 14 + .../Properties/SettingsTests.cs | 33 + .../DelegateCommandViewModelTests.cs | 100 + .../ViewModels/MainWindowViewModelTests.cs | 30 + .../Views/DelegateCommandViewTests.cs | 33 + .../Views/MainWindowTests.cs | 20 + .../MVVM_04a_CTRelayCommand/App.config | 6 + .../MVVM_04a_CTRelayCommand/App.xaml | 9 + .../MVVM_04a_CTRelayCommand/App.xaml.cs | 23 + .../MVVM_04a_CTRelayCommand/AssemblyInfo.cs | 10 + .../MVVM_04a_CTRelayCommand.csproj | 47 + .../MVVM_04a_CTRelayCommand_net.csproj | 47 + .../MVVM_04a_CTRelayCommand/MainWindow.xaml | 33 + .../MainWindow.xaml.cs | 30 + .../Properties/AssemblyInfo.cs | 68 + .../Properties/Resources.Designer.cs | 120 + .../Properties/Resources.resx | 133 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../ViewModels/MainWindowViewModel.cs | 32 + .../ViewModels/RelayCommandViewModel.cs | 39 + .../MVVM_04a_CTRelayCommand/Views/.info | 1 + .../Views/RelayCommandView.xaml | 20 + .../Views/RelayCommandView.xaml.cs | 14 + .../Properties/SettingsTests.cs | 33 + .../ViewModels/MainWindowViewModelTests.cs | 66 + .../ViewModels/RelayCommandViewModelTests.cs | 123 + .../Views/DelegateCommandViewTests.cs | 33 + .../Views/MainWindowTests.cs | 20 + .../MVVM_05_CommandParCalculator/App.config | 6 + .../MVVM_05_CommandParCalculator/App.xaml | 9 + .../MVVM_05_CommandParCalculator/App.xaml.cs | 23 + .../AssemblyInfo.cs | 10 + .../MVVM_05_CommandParCalculator.csproj | 47 + .../MVVM_05_CommandParCalculator_net.csproj | 47 + .../MainWindow.xaml | 40 + .../MainWindow.xaml.cs | 30 + .../MVVM_05_CommandParCalculator/Model/.info | 0 .../Model/CalculatorModel.cs | 348 + .../Model/ECalcError.cs | 46 + .../Model/ECommands.cs | 93 + .../Model/ENumbers.cs | 21 + .../Model/EOperations.cs | 121 + .../Model/ETrigMode.cs | 41 + .../Model/ICalculatorModel.cs | 107 + .../Properties/AssemblyInfo.cs | 68 + .../Properties/Resources.Designer.cs | 139 + .../Properties/Resources.resx | 136 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../CommandParCalculatorViewModel.cs | 141 + .../ViewModels/MainWindowViewModel.cs | 32 + .../MVVM_05_CommandParCalculator/Views/.info | 1 + .../Views/CommandParCalculatorView.xaml | 120 + .../Views/CommandParCalculatorView.xaml.cs | 14 + .../Views/Page1.xaml | 93 + .../Views/Page1.xaml.cs | 14 + .../ValueConverter/DoubleValueConverter.cs | 75 + .../Model/CalculatorModelTests.cs | 377 + .../Model/TestCalcModel.cs | 185 + .../Properties/SettingsTests.cs | 33 + .../CommandParCalculatorViewModelTests.cs | 305 + .../ViewModels/MainWindowViewModelTests.cs | 65 + .../Views/CommandParCalculatorViewTests.cs | 70 + .../Views/MainWindowTests.cs | 45 + .../Views/Page1Tests.cs | 66 + .../DoubleValueConverterTests.cs | 83 + .../MVVM_05a_CTCommandParCalc/App.config | 6 + .../MVVM_05a_CTCommandParCalc/App.xaml | 8 + .../MVVM_05a_CTCommandParCalc/App.xaml.cs | 37 + .../MVVM_05a_CTCommandParCalc/AssemblyInfo.cs | 10 + .../Data/ECalcError.cs | 46 + .../Data/ECommands.cs | 93 + .../Data/ENumbers.cs | 88 + .../Data/EOperations.cs | 121 + .../Data/ETrigMode.cs | 41 + .../MVVM_05a_CTCommandParCalc/MainWindow.xaml | 39 + .../MainWindow.xaml.cs | 30 + .../MVVM_05a_CTCommandParCalc/Model/.info | 0 .../Model/CalculatorModel.cs | 334 + .../Model/Interfaces/ICalculatorModel.cs | 108 + .../Properties/AssemblyInfo.cs | 68 + .../Properties/Resources.Designer.cs | 139 + .../Properties/Resources.resx | 136 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../CommandParCalculatorViewModel.cs | 126 + .../ViewModels/MainWindowViewModel.cs | 32 + .../MVVM_05a_CTCommandParCalc/Views/.info | 1 + .../Views/CommandParCalculatorView.xaml | 365 + .../Views/CommandParCalculatorView.xaml.cs | 20 + .../Views/Page1.xaml | 260 + .../Views/Page1.xaml.cs | 14 + .../ValueConverter/DoubleValueConverter.cs | 75 + .../Model/CalculatorModelTests.cs | 380 + .../Model/TestCalcModel.cs | 187 + .../Properties/SettingsTests.cs | 33 + .../CommandParCalculatorViewModelTests.cs | 302 + .../ViewModels/MainWindowViewModelTests.cs | 65 + .../Views/CommandParCalculatorViewTests.cs | 70 + .../Views/MainWindowTests.cs | 45 + .../Views/Page1Tests.cs | 66 + .../DoubleValueConverterTests.cs | 83 + .../MVVM_Tutorial/MVVM_06_Converter.sln | 153 + .../MVVM_Tutorial/MVVM_06_Converters/App.xaml | 9 + .../MVVM_06_Converters/App.xaml.cs | 23 + .../MVVM_06_Converters/AssemblyInfo.cs | 23 + .../MVVM_06_Converters.csproj | 33 + .../MVVM_06_Converters_net.csproj | 33 + .../MVVM_06_Converters/MainWindow.xaml | 37 + .../MVVM_06_Converters/MainWindow.xaml.cs | 30 + .../Properties/Resources.Designer.cs | 138 + .../Properties/Resources.resx | 136 + .../ValueConverter/CurrencyValueConverter.cs | 57 + .../MVVM_06_Converters/View/CurrencyView.xaml | 34 + .../View/CurrencyView.xaml.cs | 30 + .../View/Extensions/KeyboardExtensions.cs | 71 + .../ViewModels/CurrencyViewModel.cs | 49 + .../CurrencyValueConverterTests.cs | 65 + .../View/CurrencyViewTests.cs | 20 + .../View/MainWindowTests.cs | 20 + .../ViewModels/CurrencyViewViewModelTests.cs | 40 + .../MVVM_06_Converters_2/App.xaml | 9 + .../MVVM_06_Converters_2/App.xaml.cs | 23 + .../MVVM_06_Converters_2/AssemblyInfo.cs | 23 + .../MVVM_06_Converters_2.csproj | 34 + .../MVVM_06_Converters_2_net.csproj | 34 + .../MVVM_06_Converters_2/MainWindow.xaml | 17 + .../MVVM_06_Converters_2/MainWindow.xaml.cs | 30 + .../Properties/Resources.Designer.cs | 138 + .../Properties/Resources.resx | 136 + .../ValueConverter/CurrencyValueConverter.cs | 59 + .../View/Currency2View.xaml | 34 + .../View/Currency2View.xaml.cs | 30 + .../ViewModels/CurrencyViewModel.cs | 46 + .../MVVM_06_Converters_3/App.xaml | 9 + .../MVVM_06_Converters_3/App.xaml.cs | 23 + .../MVVM_06_Converters_3/AssemblyInfo.cs | 23 + .../MVVM_06_Converters_3.csproj | 33 + .../MVVM_06_Converters_3_net.csproj | 33 + .../MVVM_06_Converters_3/MainWindow.xaml | 16 + .../MVVM_06_Converters_3/MainWindow.xaml.cs | 30 + .../Properties/Resources.Designer.cs | 62 + .../Properties/Resources.resx | 101 + .../Bool2VisibilityConverter.cs | 59 + .../ValueConverter/CurrencyValueConverter.cs | 60 + .../View/CurrencyView3.xaml | 37 + .../View/CurrencyView3.xaml.cs | 30 + .../ViewModels/CurrencyViewViewModel.cs | 51 + .../Bool2VisibilityConverterTests.cs | 69 + .../CurrencyValueConverterTests.cs | 52 + .../View/CurrencyView3Tests.cs | 20 + .../View/MainWindowTests.cs | 20 + .../ViewModels/CurrencyViewViewModelTests.cs | 40 + .../MVVM_06_Converters_4/App.config | 27 + .../MVVM_06_Converters_4/App.xaml | 9 + .../MVVM_06_Converters_4/App.xaml.cs | 35 + .../MVVM_06_Converters_4/AssemblyInfo.cs | 23 + .../MVVM_06_Converters_4/MainWindow.xaml | 24 + .../MVVM_06_Converters_4/MainWindow.xaml.cs | 30 + .../MVVM_06_Converters_4/Model/AGV_Model.cs | 108 + .../MVVM_06_Converters_4/Model/IAGVModel.cs | 28 + .../Properties/Resources.Designer.cs | 62 + .../Properties/Resources.resx | 101 + .../Properties/Settings.Designer.cs | 85 + .../Properties/Settings.settings | 21 + .../Bool2VisibilityConverter.cs | 59 + .../ValueConverter/CurrencyValueConverter.cs | 60 + .../ValueConverter/DoubleValueConverter.cs | 78 + .../View/Converter/WindowPortToGridLines.cs | 387 + .../MVVM_06_Converters_4/View/PlotFrame.xaml | 64 + .../View/PlotFrame.xaml.cs | 58 + .../View/VehicleView1.xaml | 140 + .../View/VehicleView1.xaml.cs | 30 + .../ViewModels/CanvasBehavior.cs | 99 + .../ViewModels/PlotFrameViewModel.cs | 378 + .../ViewModels/VehicleViewModel.cs | 97 + .../Model/AGV_ModelTests.cs | 24 + .../Bool2VisibilityConverterTests.cs | 69 + .../CurrencyValueConverterTests.cs | 72 + .../DoubleValueConverterTests.cs | 123 + .../Converter/WindowPortToGridLinesTests.cs | 57 + .../View/MainWindowTests.cs | 42 + .../View/PlotFrameTests.cs | 55 + .../View/VehicleViewTests.cs | 52 + .../ViewModels/PlotFrameViewModelTests.cs | 38 + .../ViewModels/VehicleViewModelTests.cs | 126 + .../MVVM_Tutorial/MVVM_09_DialogBoxes.sln | 73 + .../MVVM_09_DialogBoxes/App.config | 6 + .../MVVM_09_DialogBoxes/App.xaml | 9 + .../MVVM_09_DialogBoxes/App.xaml.cs | 23 + .../MVVM_09_DialogBoxes.csproj | 41 + .../MVVM_09_DialogBoxes_net.csproj | 34 + .../Properties/AssemblyInfo.cs | 68 + .../Properties/Resources.Designer.cs | 157 + .../Properties/Resources.resx | 142 + .../ViewModels/DialogViewModel.cs | 114 + .../ViewModels/DialogWindowViewModel.cs | 80 + .../ViewModels/MainWindowViewModel.cs | 29 + .../MVVM_09_DialogBoxes/Views/DialogView.xaml | 34 + .../Views/DialogView.xaml.cs | 44 + .../Views/DialogWindow.xaml | 56 + .../Views/DialogWindow.xaml.cs | 48 + .../Views/IDialogWindow.cs | 8 + .../MVVM_09_DialogBoxes/Views/MainWindow.xaml | 39 + .../Views/MainWindow.xaml.cs | 30 + .../MVVM_09_DialogBoxesTest/AppTests.cs | 53 + .../View/DialogViewTests.cs | 134 + .../View/DialogWindowTests.cs | 110 + .../View/MainWindowTests.cs | 76 + .../ViewModels/DialogViewModelTests.cs | 123 + .../ViewModels/DialogWindowViewModelTests.cs | 84 + .../ViewModels/MainWindowViewModelTests.cs | 46 + .../MVVM_09a_CTDialogBoxes/App.config | 6 + .../MVVM_09a_CTDialogBoxes/App.xaml | 9 + .../MVVM_09a_CTDialogBoxes/App.xaml.cs | 23 + .../MVVM_09a_CTDialogBoxes.csproj | 44 + .../MVVM_09a_CTDialogBoxes_net.csproj | 21 + .../Properties/AssemblyInfo.cs | 68 + .../Properties/Resources.Designer.cs | 163 + .../Properties/Resources.resx | 142 + .../ViewModels/DialogViewModel.cs | 99 + .../ViewModels/DialogWindowViewModel.cs | 68 + .../ViewModels/MainWindowViewModel.cs | 104 + .../Views/DialogView.xaml | 34 + .../Views/DialogView.xaml.cs | 44 + .../Views/DialogWindow.xaml | 56 + .../Views/DialogWindow.xaml.cs | 55 + .../Views/IDialogWindow.cs | 8 + .../Views/MainWindow.xaml | 39 + .../Views/MainWindow.xaml.cs | 63 + .../MVVM_09a_CTDialogBoxesTests/AppTests.cs | 53 + .../ViewModels/DialogViewModelTests.cs | 192 + .../ViewModels/DialogWindowViewModelTests.cs | 90 + .../ViewModels/MainWindowViewModelTests.cs | 144 + .../Views/DialogWindowTests.cs | 111 + .../Views/MainWindowTests.cs | 134 + .../Properties/SettingsTests.cs | 34 + .../CurrencyValueConverterTests.cs | 83 + .../ViewModels/MainWindowViewModelTests.cs | 26 + .../Views/MainWindowTests.cs | 20 + .../Views/UserColtrolViewTests.cs | 20 + .../MVVM_16_Usercontrol1/App.xaml | 9 + .../MVVM_16_Usercontrol1/App.xaml.cs | 10 + .../MVVM_16_Usercontrol1/AssemblyInfo.cs | 10 + .../MVVM_16_UserControl1.csproj | 16 + .../MVVM_16_UserControl1_net.csproj | 18 + .../MVVM_16_Usercontrol1/MainWindow.xaml | 16 + .../MVVM_16_Usercontrol1/MainWindow.xaml.cs | 14 + .../ValueConverter/CurrencyValueConverter.cs | 22 + .../ViewModels/CurrencyViewViewModel.cs | 18 + .../ViewModels/MainWindowViewModel.cs | 8 + .../ViewModels/UserControlViewModel.cs | 35 + .../Views/DoubleButtonUC.xaml | 17 + .../Views/DoubleButtonUC.xaml.cs | 35 + .../Views/LabeldMaxLengthTextbox.xaml | 29 + .../Views/LabeldMaxLengthTextbox.xaml.cs | 44 + .../Views/UserControlView.xaml | 29 + .../Views/UserControlView.xaml.cs | 12 + .../MVVM_16_Usercontrol2/App.xaml | 9 + .../MVVM_16_Usercontrol2/App.xaml.cs | 10 + .../MVVM_16_Usercontrol2/AssemblyInfo.cs | 10 + .../MVVM_16_UserControl2.csproj | 16 + .../MVVM_16_UserControl2_net.csproj | 13 + .../MVVM_16_Usercontrol2/MainWindow.xaml | 15 + .../MVVM_16_Usercontrol2/MainWindow.xaml.cs | 14 + .../ViewModels/UserControlViewModel.cs | 17 + .../MVVM_16_Usercontrol2/Views/TestControl.cs | 32 + .../Views/UserControlView.xaml | 21 + .../Views/UserControlView.xaml.cs | 12 + .../MVVM_17_1_CSV_Laden/App.xaml | 9 + .../MVVM_17_1_CSV_Laden/App.xaml.cs | 23 + .../MVVM_17_1_CSV_Laden/AssemblyInfo.cs | 23 + .../MVVM_17_1_CSV_Laden.csproj | 47 + .../MVVM_17_1_CSV_Laden_net.csproj | 47 + .../MVVM_17_1_CSV_Laden/MainWindow.xaml | 36 + .../MVVM_17_1_CSV_Laden/MainWindow.xaml.cs | 30 + .../MVVM_17_1_CSV_Laden/Model/CsvModel.cs | 71 + .../MVVM_17_1_CSV_Laden/Model/DataPoint.cs | 44 + .../Properties/Resources.Designer.cs | 159 + .../Properties/Resources.resx | 139 + .../Resources/RBG_XIst_YIst.csv | 7307 +++++++++++++++++ .../ViewModels/CanvasBehavior.cs | 66 + .../ViewModels/DataPointsViewModel.cs | 126 + .../ViewModels/SWindowPort.cs | 35 + .../Views/Converter/WindowPortToGridLines.cs | 294 + .../Views/DataPointsView.xaml | 69 + .../Views/DataPointsView.xaml.cs | 54 + .../MVVM_18_MultiConverters/App.xaml | 9 + .../MVVM_18_MultiConverters/App.xaml.cs | 23 + .../MVVM_18_MultiConverters/AssemblyInfo.cs | 23 + .../MVVM_18_MultiConverters.csproj | 21 + .../MVVM_18_MultiConverters_net.csproj | 21 + .../MVVM_18_MultiConverters/MainWindow.xaml | 16 + .../MainWindow.xaml.cs | 30 + .../Model/DateDifFormat.cs | 38 + .../ValueConverter/TimeSpanConverter.cs | 73 + .../View/DateDifView.xaml | 44 + .../View/DateDifView.xaml.cs | 30 + .../ViewModels/DateDifViewModel.cs | 72 + .../MVVM_18_MultiConvertersTests/Helper/.info | 1 + .../ValueConverter/TimeSpanConverterTests.cs | 53 + .../View/DateDifViewTests.cs | 22 + .../View/MainWindowTests.cs | 22 + .../MVVM_19_FilterLists/App.config | 26 + .../MVVM_19_FilterLists/App.xaml | 10 + .../MVVM_19_FilterLists/App.xaml.cs | 23 + .../MVVM_19_FilterLists.csproj | 48 + .../MVVM_19_FilterLists_net.csproj | 56 + .../MVVM_19_FilterLists/Model/IPersons.cs | 8 + .../MVVM_19_FilterLists/Model/Person.cs | 165 + .../MVVM_19_FilterLists/Model/Persons.cs | 73 + .../Properties/Resources.Designer.cs | 118 + .../Properties/Resources.resx | 133 + .../Properties/Settings.Designer.cs | 45 + .../Properties/Settings.settings | 17 + .../MVVM_19_FilterLists/Settings.cs | 27 + .../ViewModels/MainWindowViewModel.cs | 25 + .../ViewModels/PersonViewViewModel.cs | 117 + .../MVVM_19_FilterLists/Views/MainWindow.xaml | 33 + .../Views/MainWindow.xaml.cs | 30 + .../MVVM_19_FilterLists/Views/PersonView.xaml | 107 + .../Views/PersonView.xaml.cs | 42 + .../Model/PersonTests.cs | 317 + .../MVVM_19_FilterListsTests/Properties/.info | 0 .../ViewModels/PersonViewViewModelTests.cs | 37 + .../MVVM_19_FilterListsTests/packages.config | 4 + .../MVVM_Tutorial/MVVM_20_SysDialogs.sln | 169 + .../MVVM_Tutorial/MVVM_20_Sysdialogs/App.xaml | 9 + .../MVVM_20_Sysdialogs/App.xaml.cs | 23 + .../MVVM_20_Sysdialogs/AssemblyInfo.cs | 23 + .../Converter/ColorConverter.cs | 65 + .../Converter/FontConverter.cs | 20 + .../MVVM_20_Sysdialogs.csproj | 34 + .../MVVM_20_Sysdialogs_net.csproj | 33 + .../MVVM_20_Sysdialogs/MainWindow.xaml | 47 + .../MVVM_20_Sysdialogs/MainWindow.xaml.cs | 30 + .../Properties/Resources.Designer.cs | 293 + .../Properties/Resources.resx | 178 + .../ViewModels/SysDialogsViewModel.cs | 245 + .../Views/SysDialogsView.xaml | 48 + .../Views/SysDialogsView.xaml.cs | 122 + .../Converter/ColorConverterTests.cs | 48 + .../Converter/FontConverterTests.cs | 38 + .../MainWindowTests.cs | 20 + .../SysDialogsTests.cs | 125 + .../ViewModels/SysDialogsViewModelTests.cs | 377 + .../MVVM_20a_CTSysdialogs/App.xaml | 9 + .../MVVM_20a_CTSysdialogs/App.xaml.cs | 23 + .../MVVM_20a_CTSysdialogs/AssemblyInfo.cs | 23 + .../Converter/ColorConverter.cs | 65 + .../Converter/FontConverter.cs | 20 + .../MVVM_20a_CTSysdialogs.csproj | 21 + .../MVVM_20a_CTSysdialogs_net.csproj | 22 + .../MVVM_20a_CTSysdialogs/MainWindow.xaml | 13 + .../MVVM_20a_CTSysdialogs/MainWindow.xaml.cs | 30 + .../ViewModels/SysDialogsViewModel.cs | 207 + .../Views/SysDialogs.xaml | 47 + .../Views/SysDialogs.xaml.cs | 122 + .../Converter/ColorConverterTests.cs | 47 + .../Converter/FontConverterTests.cs | 38 + .../MainWindowTests.cs | 20 + .../SysDialogsTests.cs | 125 + .../ViewModels/SysDialogsViewModelTests.cs | 398 + .../MVVM_Tutorial/MVVM_21_Buttons/App.config | 6 + .../MVVM_Tutorial/MVVM_21_Buttons/App.xaml | 9 + .../MVVM_Tutorial/MVVM_21_Buttons/App.xaml.cs | 23 + .../Converter/BoolToColorConverter.cs | 86 + .../MVVM_21_Buttons/MVVM_21_Buttons.csproj | 52 + .../MVVM_21_Buttons_net.csproj | 22 + .../MVVM_21_Buttons/MainWindow.xaml | 39 + .../MVVM_21_Buttons/MainWindow.xaml.cs | 30 + .../Properties/AssemblyInfo.cs | 66 + .../Properties/Resources.Designer.cs | 148 + .../MVVM_21_Buttons/Properties/Resources.resx | 139 + .../Properties/Settings.Designer.cs | 45 + .../Properties/Settings.settings | 7 + .../ViewModels/ButtonsViewViewModel.cs | 138 + .../MVVM_21_Buttons/Views/ButtonsView.xaml | 93 + .../MVVM_21_Buttons/Views/ButtonsView.xaml.cs | 30 + .../MVVM_Tutorial/MVVM_22_CTWpfCap/App.config | 14 + .../MVVM_Tutorial/MVVM_22_CTWpfCap/App.xaml | 9 + .../MVVM_22_CTWpfCap/App.xaml.cs | 42 + .../Converter/EnumToColorConverter.cs | 103 + .../Converter/IntToStringConverter.cs | 60 + .../MVVM_22_CTWpfCap/MainWindow.xaml | 41 + .../MVVM_22_CTWpfCap/MainWindow.xaml.cs | 30 + .../MVVM_22_CTWpfCap/Model/.info | 0 .../MVVM_22_CTWpfCap/Model/CWpfCapModel.cs | 138 + .../MVVM_22_CTWpfCap/Model/IWpfCapModel.cs | 46 + .../Properties/AssemblyInfo.cs | 68 + .../Properties/Resources.Designer.cs | 164 + .../Properties/Resources.resx | 139 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 7 + .../ViewModels/WpfCapViewModel.cs | 287 + .../MVVM_22_CTWpfCap/Views/WpfCapView.xaml | 197 + .../MVVM_22_CTWpfCap/Views/WpfCapView.xaml.cs | 30 + .../MVVM_22_CTWpfCap/packages.config | 8 + .../MVVM_22_CTWpfCapTests/AppTests.cs | 53 + .../EnumToColorStringConverterTests.cs | 121 + .../Converter/IntToStringConverterTests.cs | 44 + .../Model/CWpfCapModelTests.cs | 306 + .../Properties/AssemblyInfo.cs | 36 + .../Properties/SettingsTests.cs | 70 + .../ViewModels/WpfCapViewModelTests.cs | 200 + .../Views/MainWindowTests.cs | 61 + .../Views/WpfCapViewTests.cs | 69 + .../MVVM_22_CTWpfCapTests/app.config | 11 + .../MVVM_22_CTWpfCapTests/packages.config | 5 + CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap.sln | 94 + .../MVVM_Tutorial/MVVM_22_WpfCap/App.config | 14 + .../MVVM_Tutorial/MVVM_22_WpfCap/App.xaml | 8 + .../MVVM_Tutorial/MVVM_22_WpfCap/App.xaml.cs | 42 + .../Converter/EnumToColorConverter.cs | 103 + .../Converter/IntToStringConverter.cs | 60 + .../MVVM_22_WpfCap/MainWindow.xaml | 39 + .../MVVM_22_WpfCap/MainWindow.xaml.cs | 30 + .../MVVM_Tutorial/MVVM_22_WpfCap/Model/.info | 0 .../MVVM_22_WpfCap/Model/CWpfCapModel.cs | 138 + .../MVVM_22_WpfCap/Model/IWpfCapModel.cs | 46 + .../MVVM_22_WpfCap/Properties/AssemblyInfo.cs | 68 + .../Properties/Resources.Designer.cs | 164 + .../MVVM_22_WpfCap/Properties/Resources.resx | 139 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 7 + .../ViewModels/WpfCapViewModel.cs | 287 + .../MVVM_22_WpfCap/Views/WpfCapView.xaml | 197 + .../MVVM_22_WpfCap/Views/WpfCapView.xaml.cs | 30 + .../MVVM_22_WpfCap/packages.config | 8 + .../MVVM_22_WpfCapTests/AppTests.cs | 53 + .../EnumToColorStringConverterTests.cs | 121 + .../Converter/IntToStringConverterTests.cs | 44 + .../Model/CWpfCapModelTests.cs | 306 + .../Properties/AssemblyInfo.cs | 36 + .../Properties/SettingsTests.cs | 70 + .../ViewModels/WpfCapViewModelTests.cs | 200 + .../Views/MainWindowTests.cs | 61 + .../Views/WpfCapViewTests.cs | 69 + .../MVVM_22_WpfCapTests/app.config | 11 + .../MVVM_22_WpfCapTests/packages.config | 5 + .../MVVM_Tutorial/MVVM_24_UserControl.sln | 160 + .../MVVM_24_UserControl/App.xaml | 9 + .../MVVM_24_UserControl/App.xaml.cs | 23 + .../MVVM_24_UserControl/AssemblyInfo.cs | 10 + .../MVVM_24_UserControl.csproj | 38 + .../MVVM_24_UserControl_net.csproj | 38 + .../MVVM_24_UserControl/MainWindow.xaml | 17 + .../MVVM_24_UserControl/MainWindow.xaml.cs | 30 + .../Properties/Resources.Designer.cs | 62 + .../Properties/Resources.resx | 101 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../ViewModels/MainWindowViewModel.cs | 41 + .../ViewModels/UserControlViewModel.cs | 50 + .../MVVM_24_UserControl/Views/.info | 1 + .../Views/MaxLengthTextBoxUserControl.xaml | 28 + .../Views/MaxLengthTextBoxUserControl.xaml.cs | 30 + .../Views/UserControlView.xaml | 27 + .../Views/UserControlView.xaml.cs | 14 + .../Properties/SettingsTests.cs | 33 + .../ViewModels/MainWindowViewModelTests.cs | 28 + .../ViewModels/UserControlViewModelTests.cs | 46 + .../Views/MainWindowTests.cs | 20 + .../Views/MaxLengthTBUserControlTests.cs | 36 + .../Views/UserControlViewTests.cs | 23 + .../MVVM_24a_CTUserControl/App.xaml | 9 + .../MVVM_24a_CTUserControl/App.xaml.cs | 23 + .../MVVM_24a_CTUserControl/AssemblyInfo.cs | 10 + .../MVVM_24a_CTUserControl.csproj | 38 + .../MVVM_24a_CTUserControl_net.csproj | 38 + .../MVVM_24a_CTUserControl/MainWindow.xaml | 17 + .../MVVM_24a_CTUserControl/MainWindow.xaml.cs | 30 + .../Properties/Resources.Designer.cs | 80 + .../Properties/Resources.resx | 126 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../ViewModels/MainWindowViewModel.cs | 41 + .../ViewModels/UserControlViewModel.cs | 58 + .../MVVM_24a_CTUserControl/Views/.info | 1 + .../Views/MaxLengthTextBoxUserControl.xaml | 30 + .../Views/MaxLengthTextBoxUserControl.xaml.cs | 40 + .../Views/UserControlView.xaml | 27 + .../Views/UserControlView.xaml.cs | 14 + .../Properties/SettingsTests.cs | 33 + .../ViewModels/MainWindowViewModelTests.cs | 28 + .../ViewModels/UserControlViewModelTests.cs | 19 + .../Views/MainWindowTests.cs | 20 + .../Views/MaxLengthTBUserControlTests.cs | 41 + .../Views/UserControlViewTests.cs | 20 + .../MVVM_24b_UserControl/App.xaml | 9 + .../MVVM_24b_UserControl/App.xaml.cs | 23 + .../MVVM_24b_UserControl/AssemblyInfo.cs | 10 + .../MVVM_24b_UserControl.csproj | 44 + .../MVVM_24b_UserControl_net.csproj | 38 + .../MVVM_24b_UserControl/MainWindow.xaml | 33 + .../MVVM_24b_UserControl/MainWindow.xaml.cs | 30 + .../Properties/Resources.Designer.cs | 118 + .../Properties/Resources.resx | 133 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../ViewModels/MainWindowViewModel.cs | 41 + .../ViewModels/UserControlViewModel.cs | 52 + .../MVVM_24b_UserControl/Views/.info | 1 + .../Views/Converters/BoolToBrushConverter.cs | 29 + .../MVVM_24b_UserControl/Views/LEDView.xaml | 27 + .../Views/LEDView.xaml.cs | 28 + .../Views/MaxLengthTextBoxUserControl.xaml | 28 + .../Views/MaxLengthTextBoxUserControl.xaml.cs | 30 + .../Views/UserControlView.xaml | 170 + .../Views/UserControlView.xaml.cs | 14 + .../Properties/SettingsTests.cs | 33 + .../ViewModels/MainWindowViewModelTests.cs | 28 + .../ViewModels/UserControlViewModelTests.cs | 62 + .../Converters/BoolToBrushConverterTests.cs | 72 + .../Views/LEDViewTests.cs | 32 + .../Views/MainWindowTests.cs | 20 + .../Views/MaxLengthTBUserControlTests.cs | 38 + .../Views/UserControlViewTests.cs | 20 + .../MVVM_24c_CTUserControl/App.xaml | 9 + .../MVVM_24c_CTUserControl/App.xaml.cs | 23 + .../MVVM_24c_CTUserControl/AssemblyInfo.cs | 10 + .../MVVM_24c_CTUserControl.csproj | 44 + .../MVVM_24c_CTUserControl_net.csproj | 38 + .../MVVM_24c_CTUserControl/MainWindow.xaml | 33 + .../MVVM_24c_CTUserControl/MainWindow.xaml.cs | 30 + .../Properties/Resources.Designer.cs | 117 + .../Properties/Resources.resx | 133 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../ViewModels/MainWindowViewModel.cs | 41 + .../ViewModels/UserControlViewModel.cs | 51 + .../MVVM_24c_CTUserControl/Views/.info | 1 + .../Views/Converters/BoolToBrushConverter.cs | 29 + .../MVVM_24c_CTUserControl/Views/LEDView.xaml | 27 + .../Views/LEDView.xaml.cs | 28 + .../Views/MaxLengthTextBoxUserControl.xaml | 28 + .../Views/MaxLengthTextBoxUserControl.xaml.cs | 30 + .../Views/UserControlView.xaml | 142 + .../Views/UserControlView.xaml.cs | 14 + .../Properties/SettingsTests.cs | 33 + .../ViewModels/MainWindowViewModelTests.cs | 28 + .../ViewModels/UserControlViewModelTests.cs | 32 + .../Converters/BoolToBrushConverterTests.cs | 72 + .../Views/LEDViewTests.cs | 32 + .../Views/MainWindowTests.cs | 20 + .../Views/MaxLengthTBUserControlTests.cs | 38 + .../Views/UserControlViewTests.cs | 20 + .../MVVM_Tutorial/MVVM_25_RichTextEdit.sln | 118 + .../MVVM_25_RichTextEdit/App.xaml | 8 + .../MVVM_25_RichTextEdit/App.xaml.cs | 43 + .../MVVM_25_RichTextEdit/AssemblyInfo.cs | 10 + .../MVVM_25_RichTextEdit/CustomWords.lex | 1 + .../MVVM_25_RichTextEdit/MainWindow.xaml | 35 + .../MVVM_25_RichTextEdit/MainWindow.xaml.cs | 30 + .../MVVM_25_RichTextEdit/Models/.info | 1 + .../Models/IRichTextEditModel.cs | 46 + .../Models/PagePrinter.cs | 66 + .../Models/RichTextEditModel.cs | 112 + .../MVVM_25_RichTextEdit/Models/SimpleLog.cs | 30 + .../Properties/Resources.Designer.cs | 118 + .../Properties/Resources.resx | 133 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../Resources/all64_2.png | Bin 0 -> 91969 bytes .../ValueConverters/.info | 1 + .../ValueConverters/DateTimeValueConverter.cs | 62 + .../MVVM_25_RichTextEdit/ViewModels/.info | 1 + .../ViewModels/Helper/RichTextboxHelper.cs | 65 + .../ViewModels/MainWindowViewModel.cs | 46 + .../ViewModels/RichTextEditViewModel.cs | 164 + .../MVVM_25_RichTextEdit/Views/.info | 1 + .../Views/RichTextEditView.xaml | 152 + .../Views/RichTextEditView.xaml.cs | 68 + .../MVVM_25_RichTextEditTests/AppTests.cs | 64 + .../Models/RichTextEditModelTests.cs | 72 + .../Models/SimpleLogTests.cs | 65 + .../Properties/SettingsTests.cs | 70 + .../DateTimeValueConverterTests.cs | 72 + .../ViewModels/MainWindowViewModelTests.cs | 57 + .../ViewModels/RichTextEditViewModelTests.cs | 79 + .../Views/MainWindowTests.cs | 61 + .../Views/RichTextEditViewTests.cs | 61 + .../MVVM_26_BindingGroupExp/App.config | 6 + .../MVVM_26_BindingGroupExp/App.xaml | 12 + .../MVVM_26_BindingGroupExp/App.xaml.cs | 10 + .../MVVM_26_BindingGroupExp.csproj | 52 + .../MVVM_26_BindingGroupExp_net.csproj | 52 + .../MVVM_26_BindingGroupExp/MainWindow.xaml | 40 + .../MainWindow.xaml.cs | 30 + .../Properties/AssemblyInfo.cs | 55 + .../Properties/Resources.Designer.cs | 145 + .../Properties/Resources.resx | 136 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 7 + .../ViewModels/BindingGroupViewModel.cs | 139 + .../ViewModels/MainWindowViewModel.cs | 7 + .../Views/BindingGroupView.xaml | 92 + .../Views/BindingGroupView.xaml.cs | 44 + .../Views/Validation/FutureDateRule.cs | 16 + .../Validation/PriceIsAPositiveNumber.cs | 14 + .../Views/Validation/ValidateDateAndPrice.cs | 40 + .../MVVM_26_CTBindingGroupExp/App.config | 6 + .../MVVM_26_CTBindingGroupExp/App.xaml | 12 + .../MVVM_26_CTBindingGroupExp/App.xaml.cs | 10 + .../MVVM_26_CTBindingGroupExp.csproj | 52 + .../MVVM_26_CTBindingGroupExp_net.csproj | 52 + .../Properties/AssemblyInfo.cs | 55 + .../Properties/Resources.Designer.cs | 134 + .../Properties/Resources.de.resx | 144 + .../Properties/Resources.resx | 144 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 7 + .../View/MainWindow.xaml | 93 + .../View/MainWindow.xaml.cs | 42 + .../View/Validation/FutureDateRule.cs | 18 + .../View/Validation/PriceIsAPositiveNumber.cs | 15 + .../View/Validation/ValidateDateAndPrice.cs | 42 + .../ViewModels/MainWindowViewModel.cs | 113 + .../MVVM_Tutorial/MVVM_27_DataGrid/App.config | 6 + .../MVVM_Tutorial/MVVM_27_DataGrid/App.xaml | 9 + .../MVVM_27_DataGrid/App.xaml.cs | 23 + .../MVVM_27_DataGrid/AssemblyInfo.cs | 10 + .../MVVM_27_DataGrid/MVVM_27_DataGrid.csproj | 41 + .../MVVM_27_DataGrid_net.csproj | 37 + .../MVVM_27_DataGrid/MainWindow.xaml | 16 + .../MVVM_27_DataGrid/MainWindow.xaml.cs | 30 + .../MVVM_27_DataGrid/Models/.info | 1 + .../MVVM_27_DataGrid/Models/Department.cs | 11 + .../MVVM_27_DataGrid/Models/Person.cs | 13 + .../Properties/Resources.Designer.cs | 98 + .../Properties/Resources.de.resx | 132 + .../Properties/Resources.resx | 132 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../MVVM_27_DataGrid/Services/.info | 1 + .../Services/PersonService.cs | 28 + .../ValueConverter/EmailValue.cs | 19 + .../ViewModels/DatagridViewModel.cs | 19 + .../ViewModels/MainWindowViewModel.cs | 43 + .../MVVM_27_DataGrid/Views/.info | 1 + .../MVVM_27_DataGrid/Views/DatagridView.xaml | 74 + .../Views/DatagridView.xaml.cs | 14 + .../MVVM_27_DataGridTests/Models/.info | 1 + .../Models/DepartmrntTests.cs | 65 + .../Models/PersonTests.cs | 59 + .../Properties/SettingsTests.cs | 33 + .../Services/PersonServiceTests.cs | 40 + .../ValueConverter/EmailValueTests.cs | 53 + .../ViewModels/DataGridViewModelTests.cs | 23 + .../ViewModels/MainWindowViewModelTests.cs | 26 + .../Views/DataGridViewTests.cs | 20 + .../Views/MainWindowTests.cs | 20 + .../MVVM_28_1_CTDataGridExt/App.config | 6 + .../MVVM_28_1_CTDataGridExt/App.xaml | 9 + .../MVVM_28_1_CTDataGridExt/App.xaml.cs | 40 + .../MVVM_28_1_CTDataGridExt/AssemblyInfo.cs | 10 + .../MVVM_28_1_CTDataGridExt/MainWindow.xaml | 16 + .../MainWindow.xaml.cs | 30 + .../MVVM_28_1_CTDataGridExt/Models/.info | 1 + .../Models/Department.cs | 10 + .../MVVM_28_1_CTDataGridExt/Models/Person.cs | 13 + .../Properties/Resources.Designer.cs | 179 + .../Properties/Resources.de.resx | 163 + .../Properties/Resources.resx | 163 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../MVVM_28_1_CTDataGridExt/Services/.info | 1 + .../Services/IPersonService.cs | 11 + .../Services/PersonService.cs | 100 + .../Bool2VisibilityConverter.cs | 59 + .../ValueConverter/EmailValue.cs | 64 + .../ViewModels/DatagridViewModel.cs | 41 + .../ViewModels/MainWindowViewModel.cs | 43 + .../MVVM_28_1_CTDataGridExt/Views/.info | 1 + .../Views/DataGridView.xaml | 99 + .../Views/DatagridView.xaml.cs | 14 + .../MVVM_28_1_CTDataGridExtTests/AppTests.cs | 53 + .../MVVM_28_1_CTDataGridExtTests/Models/.info | 1 + .../Models/DepartmrntTests.cs | 68 + .../Models/PersonTests.cs | 59 + .../Properties/SettingsTests.cs | 33 + .../Services/PersonServiceTests.cs | 48 + .../Bool2VisibilityConverterTests.cs | 69 + .../ValueConverter/EmailValueTests.cs | 53 + .../ViewModels/DataGridViewModelTests.cs | 66 + .../ViewModels/MainWindowViewModelTests.cs | 26 + .../Views/DataGridViewTests.cs | 23 + .../Views/MainWindowTests.cs | 20 + .../MVVM_Tutorial/MVVM_28_1_DataGridExt.sln | 70 + .../MVVM_28_1_DataGridExt/App.config | 6 + .../MVVM_28_1_DataGridExt/App.xaml | 9 + .../MVVM_28_1_DataGridExt/App.xaml.cs | 23 + .../MVVM_28_1_DataGridExt/AssemblyInfo.cs | 10 + .../MVVM_28_1_DataGridExt.csproj | 41 + .../MVVM_28_1_DataGridExt_net.csproj | 40 + .../MVVM_28_1_DataGridExt/MainWindow.xaml | 16 + .../MVVM_28_1_DataGridExt/MainWindow.xaml.cs | 30 + .../MVVM_28_1_DataGridExt/Models/.info | 1 + .../Models/Department.cs | 10 + .../MVVM_28_1_DataGridExt/Models/Person.cs | 13 + .../Properties/Resources.Designer.cs | 179 + .../Properties/Resources.de.resx | 163 + .../Properties/Resources.resx | 163 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../MVVM_28_1_DataGridExt/Services/.info | 1 + .../Services/PersonService.cs | 98 + .../Bool2VisibilityConverter.cs | 59 + .../ValueConverter/EmailValue.cs | 64 + .../ViewModels/DatagridViewModel.cs | 43 + .../ViewModels/MainWindowViewModel.cs | 43 + .../MVVM_28_1_DataGridExt/Views/.info | 1 + .../Views/DataGridView.xaml | 99 + .../Views/DatagridView.xaml.cs | 14 + .../MVVM_28_1_DataGridExtTests/Models/.info | 1 + .../Models/DepartmrntTests.cs | 68 + .../Models/PersonTests.cs | 59 + .../Properties/SettingsTests.cs | 33 + .../Services/PersonServiceTests.cs | 48 + .../Bool2VisibilityConverterTests.cs | 69 + .../ValueConverter/EmailValueTests.cs | 53 + .../ViewModels/DataGridViewModelTests.cs | 26 + .../ViewModels/MainWindowViewModelTests.cs | 26 + .../Views/DataGridViewTests.cs | 20 + .../Views/MainWindowTests.cs | 20 + .../MVVM_Tutorial/MVVM_28_DataGrid.sln | 70 + .../MVVM_Tutorial/MVVM_28_DataGrid/App.config | 6 + .../MVVM_Tutorial/MVVM_28_DataGrid/App.xaml | 9 + .../MVVM_28_DataGrid/App.xaml.cs | 23 + .../MVVM_28_DataGrid/AssemblyInfo.cs | 10 + .../MVVM_28_DataGrid/MVVM_28_DataGrid.csproj | 38 + .../MVVM_28_DataGrid_net.csproj | 37 + .../MVVM_28_DataGrid/MainWindow.xaml | 16 + .../MVVM_28_DataGrid/MainWindow.xaml.cs | 30 + .../MVVM_28_DataGrid/Models/.info | 1 + .../MVVM_28_DataGrid/Models/Department.cs | 11 + .../MVVM_28_DataGrid/Models/Person.cs | 14 + .../Properties/Resources.Designer.cs | 170 + .../Properties/Resources.de.resx | 160 + .../Properties/Resources.resx | 160 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../MVVM_28_DataGrid/Services/.info | 1 + .../Services/PersonService.cs | 93 + .../ValueConverter/EmailValue.cs | 64 + .../ViewModels/DatagridViewModel.cs | 31 + .../ViewModels/MainWindowViewModel.cs | 43 + .../MVVM_28_DataGrid/Views/.info | 1 + .../MVVM_28_DataGrid/Views/DataGridView.xaml | 79 + .../Views/DatagridView.xaml.cs | 14 + .../MVVM_28_DataGridTests/Models/.info | 1 + .../Models/DepartmrntTests.cs | 68 + .../Models/PersonTests.cs | 59 + .../Properties/SettingsTests.cs | 33 + .../Services/PersonServiceTests.cs | 40 + .../ValueConverter/EmailValueTests.cs | 53 + .../ViewModels/DataGridViewModelTests.cs | 23 + .../ViewModels/MainWindowViewModelTests.cs | 26 + .../Views/DataGridViewTests.cs | 20 + .../Views/MainWindowTests.cs | 20 + .../MVVM_Tutorial/MVVM_31_Validation.sln | 166 + .../MVVM_31_Validation1/App.config | 6 + .../MVVM_31_Validation1/App.xaml | 9 + .../MVVM_31_Validation1/App.xaml.cs | 23 + .../MVVM_31_Validation1/AssemblyInfo.cs | 10 + .../MVVM_31_Validation1.csproj | 48 + .../MVVM_31_Validation1_net.csproj | 52 + .../MVVM_31_Validation1/MainWindow.xaml | 18 + .../MVVM_31_Validation1/MainWindow.xaml.cs | 30 + .../Properties/AssemblyInfo.cs | 68 + .../Properties/Resources.Designer.cs | 80 + .../Properties/Resources.resx | 126 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../View/ValidationPage.xaml | 19 + .../View/ValidationPage.xaml.cs | 14 + .../ViewModels/MainWindowViewModel.cs | 43 + .../ViewModels/ValidationPageViewModel.cs | 20 + .../Properties/SettingsTests.cs | 33 + .../View/MainWindowTests.cs | 20 + .../View/ValidationPageTests.cs | 30 + .../ViewModels/MainWindowViewModelTests.cs | 28 + .../ValidationPageViewModelTests.cs | 33 + .../MVVM_31_Validation2/App.config | 6 + .../MVVM_31_Validation2/App.xaml | 9 + .../MVVM_31_Validation2/App.xaml.cs | 23 + .../MVVM_31_Validation2/AssemblyInfo.cs | 10 + .../MVVM_31_Validation2.csproj | 47 + .../MVVM_31_Validation2_net.csproj | 50 + .../MVVM_31_Validation2/MainWindow.xaml | 17 + .../MVVM_31_Validation2/MainWindow.xaml.cs | 30 + .../Properties/AssemblyInfo.cs | 68 + .../Properties/Resources.Designer.cs | 98 + .../Properties/Resources.resx | 132 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../View/ValidationPage.xaml | 19 + .../View/ValidationPage.xaml.cs | 14 + .../ViewModels/MainWindowViewModel.cs | 43 + .../ViewModels/ValidationPageViewModel.cs | 44 + .../Properties/SettingsTests.cs | 33 + .../View/MainWindowTests.cs | 20 + .../View/ValidationPageTests.cs | 30 + .../ViewModels/MainWindowViewModelTests.cs | 28 + .../ValidationPageViewModelTests.cs | 42 + .../MVVM_31a_CTValidation1/App.config | 6 + .../MVVM_31a_CTValidation1/App.xaml | 9 + .../MVVM_31a_CTValidation1/App.xaml.cs | 23 + .../MVVM_31a_CTValidation1/AssemblyInfo.cs | 10 + .../MVVM_31a_CTValidation1.csproj | 48 + .../MVVM_31a_CTValidation1_net.csproj | 52 + .../MVVM_31a_CTValidation1/MainWindow.xaml | 17 + .../MVVM_31a_CTValidation1/MainWindow.xaml.cs | 30 + .../Properties/AssemblyInfo.cs | 68 + .../Properties/Resources.Designer.cs | 62 + .../Properties/Resources.resx | 101 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../View/ValidationPage.xaml | 18 + .../View/ValidationPage.xaml.cs | 14 + .../ViewModels/MainWindowViewModel.cs | 43 + .../ViewModels/ValidationPageViewModel.cs | 20 + .../Properties/SettingsTests.cs | 33 + .../View/MainWindowTests.cs | 20 + .../View/ValidationPageTests.cs | 30 + .../ViewModels/MainWindowViewModelTests.cs | 26 + .../ValidationPageViewModelTests.cs | 49 + .../MVVM_31a_CTValidation2/App.config | 6 + .../MVVM_31a_CTValidation2/App.xaml | 9 + .../MVVM_31a_CTValidation2/App.xaml.cs | 23 + .../MVVM_31a_CTValidation2/AssemblyInfo.cs | 10 + .../MVVM_31a_CTValidation2.csproj | 47 + .../MVVM_31a_CTValidation2_net.csproj | 50 + .../MVVM_31a_CTValidation2/MainWindow.xaml | 16 + .../MVVM_31a_CTValidation2/MainWindow.xaml.cs | 30 + .../Properties/AssemblyInfo.cs | 68 + .../Properties/Resources.Designer.cs | 62 + .../Properties/Resources.resx | 101 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../View/ValidationPage.xaml | 18 + .../View/ValidationPage.xaml.cs | 14 + .../ViewModels/MainWindowViewModel.cs | 43 + .../ViewModels/ValidationPageViewModel.cs | 41 + .../Properties/SettingsTests.cs | 33 + .../View/MainWindowTests.cs | 20 + .../View/ValidationPageTests.cs | 30 + .../ViewModels/MainWindowViewModelTests.cs | 28 + .../ValidationPageViewModelTests.cs | 76 + .../MVVM_31a_CTValidation3/App.config | 6 + .../MVVM_31a_CTValidation3/App.xaml | 9 + .../MVVM_31a_CTValidation3/App.xaml.cs | 23 + .../MVVM_31a_CTValidation3/AssemblyInfo.cs | 10 + .../MVVM_31a_CTValidation3.csproj | 54 + .../MVVM_31a_CTValidation3_net.csproj | 50 + .../MVVM_31a_CTValidation3/MainWindow.xaml | 16 + .../MVVM_31a_CTValidation3/MainWindow.xaml.cs | 30 + .../Properties/AssemblyInfo.cs | 68 + .../Properties/Resources.Designer.cs | 98 + .../Properties/Resources.de.resx | 132 + .../Properties/Resources.resx | 132 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../Validator/NotASpecData.cs | 52 + .../View/ValidationPage.xaml | 20 + .../View/ValidationPage.xaml.cs | 14 + .../ViewModels/MainWindowViewModel.cs | 43 + .../ViewModels/ValidationPageViewModel.cs | 48 + .../Properties/SettingsTests.cs | 33 + .../Validator/NotTheSpecDataTests.cs | 19 + .../View/MainWindowTests.cs | 20 + .../View/ValidationPageTests.cs | 30 + .../ViewModels/MainWindowViewModelTests.cs | 28 + .../ValidationPageViewModelTests.cs | 96 + .../MVVM_33_Events_to_Commands.sln | 94 + .../MVVM_33_Events_to_Commands/App.xaml | 8 + .../MVVM_33_Events_to_Commands/App.xaml.cs | 27 + .../AssemblyInfo.cs | 10 + .../MVVM_33_Events_to_Commands.csproj | 40 + .../MVVM_33_Events_to_Commands_net.csproj | 40 + .../MainWindow.xaml | 16 + .../MainWindow.xaml.cs | 30 + .../MVVM_33_Events_to_Commands/Models/.info | 1 + .../Properties/Resources.Designer.cs | 62 + .../Properties/Resources.resx | 101 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../ValueConverters/.info | 1 + .../ValueConverters/DateTimeValueConverter.cs | 62 + .../ViewModels/.info | 1 + .../ViewModels/EventsBindingViewModel.cs | 52 + .../ViewModels/MainWindowViewModel.cs | 46 + .../MVVM_33_Events_to_Commands/Views/.info | 1 + .../Views/EventsBindingView.xaml | 34 + .../Views/EventsBindingView.xaml.cs | 14 + .../Properties/SettingsTests.cs | 33 + .../DateTimeValueConverterTests.cs | 72 + .../ViewModels/EventsBindingViewModelTests.cs | 49 + .../ViewModels/MainWindowViewModelTests.cs | 61 + .../Views/EventsBindingViewTests.cs | 28 + .../Views/MainWindowTests.cs | 28 + .../MVVM_33a_CTEvents_To_Commands/App.xaml | 9 + .../MVVM_33a_CTEvents_To_Commands/App.xaml.cs | 27 + .../AssemblyInfo.cs | 10 + .../MVVM_33a_CTEvents_To_Commands.csproj | 40 + .../MVVM_33a_CTEvents_To_Commands_net.csproj | 40 + .../MainWindow.xaml | 16 + .../MainWindow.xaml.cs | 30 + .../Models/.info | 1 + .../Properties/Resources.Designer.cs | 62 + .../Properties/Resources.resx | 101 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../ValueConverters/.info | 1 + .../ValueConverters/DateTimeValueConverter.cs | 62 + .../ViewModels/.info | 1 + .../ViewModels/EventsBindingViewModel.cs | 56 + .../ViewModels/MainWindowViewModel.cs | 46 + .../MVVM_33a_CTEvents_To_Commands/Views/.info | 1 + .../Views/EventsBindingView.xaml | 35 + .../Views/EventsBindingView.xaml.cs | 14 + .../Properties/SettingsTests.cs | 33 + .../DateTimeValueConverterTests.cs | 72 + .../ViewModels/EventsBindingViewModelTests.cs | 49 + .../ViewModels/MainWindowViewModelTests.cs | 61 + .../Views/EventsBindingViewTests.cs | 28 + .../Views/MainWindowTests.cs | 28 + .../MVVM_34_BindingEventArgs.sln | 94 + .../MVVM_34_BindingEventArgs/App.xaml | 9 + .../MVVM_34_BindingEventArgs/App.xaml.cs | 27 + .../MVVM_34_BindingEventArgs/AssemblyInfo.cs | 10 + .../MVVM_34_BindingEventArgs.csproj | 40 + .../MVVM_34_BindingEventArgs_net.csproj | 40 + .../MVVM_34_BindingEventArgs/MainWindow.xaml | 16 + .../MainWindow.xaml.cs | 30 + .../MVVM_34_BindingEventArgs/Models/.info | 1 + .../Properties/Resources.Designer.cs | 62 + .../Properties/Resources.resx | 101 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../ValueConverters/.info | 1 + .../ValueConverters/DateTimeValueConverter.cs | 62 + .../MVVM_34_BindingEventArgs/ViewModels/.info | 1 + .../ViewModels/EventsBindingViewModel.cs | 56 + .../ViewModels/MainWindowViewModel.cs | 46 + .../MVVM_34_BindingEventArgs/Views/.info | 1 + .../Views/EventsBindingView.xaml | 38 + .../Views/EventsBindingView.xaml.cs | 14 + .../Properties/SettingsTests.cs | 33 + .../DateTimeValueConverterTests.cs | 72 + .../ViewModels/EventBindingViewModelTests.cs | 96 + .../ViewModels/MainWindowViewModelTests.cs | 26 + .../Views/EventBindingViewTests.cs | 28 + .../Views/MainWindowTests.cs | 28 + .../MVVM_34a_CTBindingEventArgs/App.xaml | 9 + .../MVVM_34a_CTBindingEventArgs/App.xaml.cs | 27 + .../AssemblyInfo.cs | 10 + .../MVVM_34a_CTBindingEventArgs.csproj | 40 + .../MVVM_34a_CTBindingEventArgs_net.csproj | 40 + .../MainWindow.xaml | 16 + .../MainWindow.xaml.cs | 30 + .../MVVM_34a_CTBindingEventArgs/Models/.info | 1 + .../Properties/Resources.Designer.cs | 62 + .../Properties/Resources.resx | 101 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../ValueConverters/.info | 1 + .../ValueConverters/DateTimeValueConverter.cs | 62 + .../ViewModels/.info | 1 + .../ViewModels/EventsBindingViewModel.cs | 65 + .../ViewModels/MainWindowViewModel.cs | 46 + .../MVVM_34a_CTBindingEventArgs/Views/.info | 1 + .../Views/EventsBindingView.xaml | 37 + .../Views/EventsBindingView.xaml.cs | 14 + .../Properties/SettingsTests.cs | 33 + .../DateTimeValueConverterTests.cs | 72 + .../ViewModels/EventBindingViewModelTests.cs | 96 + .../ViewModels/MainWindowViewModelTests.cs | 26 + .../Views/EventBindingViewTests.cs | 28 + .../Views/MainWindowTests.cs | 28 + .../MVVM_35_CommunityToolkit.sln | 70 + .../MVVM_35_CommunityToolkit/App.xaml | 9 + .../MVVM_35_CommunityToolkit/App.xaml.cs | 27 + .../MVVM_35_CommunityToolkit/AssemblyInfo.cs | 10 + .../MVVM_35_CommunityToolkit.csproj | 37 + .../MVVM_35_CommunityToolkit_net.csproj | 40 + .../MVVM_35_CommunityToolkit/MainWindow.xaml | 16 + .../MainWindow.xaml.cs | 30 + .../MVVM_35_CommunityToolkit/Models/.info | 1 + .../Properties/Resources.Designer.cs | 62 + .../Properties/Resources.resx | 101 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../ValueConverters/.info | 1 + .../ValueConverters/DateTimeValueConverter.cs | 62 + .../MVVM_35_CommunityToolkit/ViewModels/.info | 1 + .../ViewModels/CommunitToolkitViewModel.cs | 77 + .../ViewModels/MainWindowViewModel.cs | 46 + .../MVVM_35_CommunityToolkit/Views/.info | 1 + .../Views/CommunitToolkitView.xaml | 41 + .../Views/CommunitToolkitView.xaml.cs | 14 + .../Properties/SettingsTests.cs | 70 + .../DateTimeValueConverterTests.cs | 72 + .../CommunitToolkitViewModelTests.cs | 108 + .../ViewModels/MainWindowViewModelTests.cs | 61 + .../Views/MainWindowTests.cs | 61 + .../Views/TemplateViewTests.cs | 61 + .../MVVM_36_ComToolKtSavesWork/App.xaml | 8 + .../MVVM_36_ComToolKtSavesWork/App.xaml.cs | 49 + .../AssemblyInfo.cs | 10 + .../MainWindow.xaml | 17 + .../MainWindow.xaml.cs | 30 + .../MVVM_36_ComToolKtSavesWork/Models/.info | 1 + .../Models/CommunityToolkit2Model.cs | 77 + .../Models/ICommunityToolkit2Model.cs | 40 + .../Models/IUserRepository.cs | 6 + .../MVVM_36_ComToolKtSavesWork/Models/User.cs | 7 + .../Models/UserRepository.cs | 37 + .../Properties/Resources.Designer.cs | 134 + .../Properties/Resources.de.resx | 144 + .../Properties/Resources.resx | 144 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../Themes/Generic.xaml | 32 + .../ValueConverters/.info | 1 + .../Bool2VisibilityConverter.cs | 59 + .../ValueConverters/DateTimeValueConverter.cs | 62 + .../ViewModels/.info | 1 + .../ViewModels/CommunityToolkit2ViewModel.cs | 82 + .../ViewModels/LoginViewModel.cs | 39 + .../ViewModels/MainWindowViewModel.cs | 46 + .../ViewModels/ShowLoginMessage.cs | 18 + .../ViewModels/UserInfoViewModel.cs | 50 + .../MVVM_36_ComToolKtSavesWork/Views/.info | 1 + .../Views/CommunityToolkit2View.xaml | 42 + .../Views/CommunityToolkit2View.xaml.cs | 14 + .../Views/UserControls/LoginControl.xaml | 23 + .../Views/UserControls/LoginControl.xaml.cs | 14 + .../Views/UserControls/UserInfoControl.xaml | 30 + .../UserControls/UserInfoControl.xaml.cs | 14 + .../AppTests.cs | 85 + .../Models/CommunityToolkit2ModelTests.cs | 66 + .../Models/UserRepositoryTests.cs | 21 + .../Properties/SettingsTests.cs | 70 + .../Bool2VisibilityConverterTests.cs | 69 + .../DateTimeValueConverterTests.cs | 72 + .../CommunityToolkit2ViewModelTests.cs | 124 + .../ViewModels/LoginViewModelTests.cs | 136 + .../ViewModels/MainWindowViewModelTests.cs | 65 + .../ViewModels/TestUserModel.cs | 36 + .../ViewModels/TestUserRepository.cs | 34 + .../ViewModels/UserInfoViewModelTests.cs | 119 + .../Views/CommunityToolkit2ViewTests.cs | 88 + .../Views/MainWindowTests.cs | 88 + .../MVVM_36_ComToolkitSavesWork.sln | 70 + .../MVVM_Tutorial/MVVM_37_TreeView.sln | 70 + .../MVVM_Tutorial/MVVM_37_TreeView/App.xaml | 8 + .../MVVM_37_TreeView/App.xaml.cs | 42 + .../MVVM_37_TreeView/AssemblyInfo.cs | 10 + .../MVVM_37_TreeView/MainWindow.xaml | 16 + .../MVVM_37_TreeView/MainWindow.xaml.cs | 30 + .../MVVM_37_TreeView/Models/.info | 1 + .../MVVM_37_TreeView/Models/Book.cs | 22 + .../MVVM_37_TreeView/Models/ITemplateModel.cs | 40 + .../Properties/Resources.Designer.cs | 62 + .../Properties/Resources.resx | 101 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../MVVM_37_TreeView/Services/.info | 1 + .../MVVM_37_TreeView/Services/BooksService.cs | 26 + .../Services/IBooksService.cs | 9 + .../MVVM_37_TreeView/ValueConverters/.info | 1 + .../ValueConverters/DateTimeValueConverter.cs | 62 + .../MVVM_37_TreeView/ViewModels/.info | 1 + .../ViewModels/BooksTreeViewModel.cs | 82 + .../ViewModels/CategorizedBooksViewModel.cs | 17 + .../ViewModels/MainWindowViewModel.cs | 46 + .../MVVM_37_TreeView/Views/.info | 1 + .../MVVM_37_TreeView/Views/BooksTreeView.xaml | 58 + .../Views/BooksTreeView.xaml.cs | 14 + .../MVVM_37_TreeViewTests/AppTests.cs | 53 + .../Models/BookModelTests.cs | 65 + .../Properties/SettingsTests.cs | 70 + .../DateTimeValueConverterTests.cs | 72 + .../ViewModels/BooksTreeViewModelTests.cs | 81 + .../ViewModels/MainWindowViewModelTests.cs | 65 + .../Views/BooksTreeViewTests.cs | 92 + .../Views/MainWindowTests.cs | 61 + .../MVVM_38_CTDependencyInjection/App.xaml | 9 + .../MVVM_38_CTDependencyInjection/App.xaml.cs | 49 + .../AssemblyInfo.cs | 10 + .../MainWindow.xaml | 16 + .../MainWindow.xaml.cs | 30 + .../Models/.info | 1 + .../Models/CLog.cs | 9 + .../Models/CSysTime.cs | 10 + .../Models/CTimer.cs | 23 + .../Models/EPermission.cs | 9 + .../Models/Interfaces/ILog.cs | 6 + .../Models/Interfaces/ISysTime.cs | 21 + .../Models/Interfaces/ITemplateModel.cs | 43 + .../Models/Interfaces/ITimer.cs | 27 + .../Models/Interfaces/IUserRepository.cs | 23 + .../Models/TemplateModel.cs | 89 + .../Models/UserRepository.cs | 31 + .../Properties/Resources.Designer.cs | 138 + .../Properties/Resources.resx | 136 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../ValueConverters/.info | 1 + .../ValueConverters/DateTimeValueConverter.cs | 62 + .../ViewModels/.info | 1 + .../DependencyInjectionViewModel.cs | 62 + .../ViewModels/MainWindowViewModel.cs | 46 + .../MVVM_38_CTDependencyInjection/Views/.info | 1 + .../Views/DependencyInjectionView.xaml | 41 + .../Views/DependencyInjectionView.xaml.cs | 14 + .../AppTests.cs | 57 + .../Models/CLogTests.cs | 15 + .../Models/CSysTimeTests.cs | 24 + .../Models/CTimerTests.cs | 47 + .../Models/TemplateModelTests.cs | 83 + .../Models/UserRepositoryTests.cs | 65 + .../Properties/SettingsTests.cs | 70 + .../DateTimeValueConverterTests.cs | 72 + .../ViewModels/MainWindowViewModelTests.cs | 65 + .../ViewModels/TemplateViewModelTests.cs | 78 + .../Views/DependencyInjectionViewTests.cs | 69 + .../Views/MainWindowTests.cs | 61 + .../MVVM_Tutorial/MVVM_39_MultiModel.sln | 73 + .../MVVM_39_MultiModelTest/App.xaml | 9 + .../MVVM_39_MultiModelTest/App.xaml.cs | 46 + .../MVVM_39_MultiModelTest/AssemblyInfo.cs | 10 + .../MVVM_39_MultiModelTest/MainWindow.xaml | 16 + .../MVVM_39_MultiModelTest/MainWindow.xaml.cs | 30 + .../MVVM_39_MultiModelTest/Models/.info | 1 + .../Models/IScopedModel.cs | 29 + .../Models/ISystemModel.cs | 45 + .../Models/ScopedModel.cs | 33 + .../Models/SystemModel.cs | 92 + .../Properties/Resources.Designer.cs | 172 + .../Properties/Resources.resx | 139 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../ValueConverters/.info | 1 + .../ValueConverters/DateTimeValueConverter.cs | 62 + .../MVVM_39_MultiModelTest/ViewModels/.info | 1 + .../ViewModels/DetailPageViewModel.cs | 39 + .../ViewModels/MainWindowViewModel.cs | 46 + .../ViewModels/MultiModelMainViewModel.cs | 80 + .../ViewModels/ScopedModelViewModel.cs | 77 + .../MVVM_39_MultiModelTest/Views/.info | 1 + .../Views/DetailPage1.xaml | 22 + .../Views/DetailPage1.xaml.cs | 14 + .../Views/DetailPage2.xaml | 22 + .../Views/DetailPage2.xaml.cs | 14 + .../Views/DetailPage3.xaml | 22 + .../Views/DetailPage3.xaml.cs | 14 + .../Views/MultiModelMainView.xaml | 33 + .../Views/MultiModelMainView.xaml.cs | 39 + .../Views/ScopedModelView.xaml | 36 + .../Views/ScopedModelView.xaml.cs | 36 + .../MVVM_39_MultiModelTestTests/AppTests.cs | 58 + .../Models/ScopedModelTests.cs | 71 + .../Models/SystemModelTests.cs | 57 + .../Properties/SettingsTests.cs | 70 + .../DateTimeValueConverterTests.cs | 72 + .../ViewModels/DetailPageViewModelTests.cs | 68 + .../ViewModels/MainWindowViewModelTests.cs | 65 + .../MultiModelMainViewModelTests.cs | 66 + .../ViewModels/ScopedModelViewModelTests.cs | 94 + .../Views/DetailPage1Tests.cs | 61 + .../Views/DetailPage2Tests.cs | 61 + .../Views/DetailPage3Tests.cs | 61 + .../Views/MainWindowTests.cs | 61 + .../Views/MultiModelMainViewTests.cs | 71 + .../Views/ScopedModelViewTests.cs | 74 + CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard.sln | 70 + .../MVVM_Tutorial/MVVM_40_Wizzard/App.xaml | 9 + .../MVVM_Tutorial/MVVM_40_Wizzard/App.xaml.cs | 85 + .../MVVM_40_Wizzard/AssemblyInfo.cs | 10 + .../MVVM_40_Wizzard/MainWindow.xaml | 33 + .../MVVM_40_Wizzard/MainWindow.xaml.cs | 30 + .../MVVM_40_Wizzard/Models/.info | 1 + .../Models/Interfaces/IWizzardModel.cs | 55 + .../MVVM_40_Wizzard/Models/ListEntry.cs | 40 + .../MVVM_40_Wizzard/Models/SimpleLog.cs | 56 + .../MVVM_40_Wizzard/Models/WizzardModel.cs | 115 + .../Properties/Resources.Designer.cs | 409 + .../Properties/Resources.de.resx | 226 + .../Properties/Resources.en.resx | 226 + .../Properties/Resources.fr.resx | 226 + .../MVVM_40_Wizzard/Properties/Resources.resx | 226 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../Resources/MainSelection.xaml | 1 + .../Resources/MainSelection0.png | Bin 0 -> 6989 bytes .../Resources/MainSelection0.xaml | 1 + .../Resources/MainSelection1.png | Bin 0 -> 5882 bytes .../Resources/MainSelection1.xaml | 1 + .../Resources/MainSelection3.png | Bin 0 -> 6605 bytes .../Resources/MainSelection3.xaml | 1 + .../Resources/MainSelection4.png | Bin 0 -> 8464 bytes .../Resources/MainSelection4.xaml | 1 + .../Resources/MainSelection6.png | Bin 0 -> 8396 bytes .../Resources/MainSelection6.xaml | 1 + .../Resources/MainSelection8.png | Bin 0 -> 8396 bytes .../Resources/de/MainSelection0.xaml | 1 + .../Resources/de/MainSelection1.xaml | 1 + .../Resources/de/MainSelection3.xaml | 1 + .../Resources/de/MainSelection4.xaml | 1 + .../Resources/de/MainSelection6.xaml | 1 + .../Resources/de/MainSelection8.xaml | 1 + .../Resources/en/MainSelection0.xaml | 1 + .../Resources/fr/MainSelection0.xaml | 1 + .../MVVM_40_Wizzard/ValueConverters/.info | 1 + .../ValueConverters/DateTimeValueConverter.cs | 62 + .../MVVM_40_Wizzard/ViewModels/.info | 1 + .../ViewModels/MainWindowViewModel.cs | 46 + .../ViewModels/Page1ViewModel.cs | 164 + .../ViewModels/Page2ViewModel.cs | 94 + .../ViewModels/Page3ViewModel.cs | 117 + .../ViewModels/Page4ViewModel.cs | 108 + .../ViewModels/WizzardViewModel.cs | 196 + .../MVVM_Tutorial/MVVM_40_Wizzard/Views/.info | 1 + .../MVVM_40_Wizzard/Views/Page1View.xaml | 34 + .../MVVM_40_Wizzard/Views/Page1View.xaml.cs | 14 + .../MVVM_40_Wizzard/Views/Page2View.xaml | 26 + .../MVVM_40_Wizzard/Views/Page2View.xaml.cs | 14 + .../MVVM_40_Wizzard/Views/Page3View.xaml | 30 + .../MVVM_40_Wizzard/Views/Page3View.xaml.cs | 14 + .../MVVM_40_Wizzard/Views/Page4View.xaml | 34 + .../MVVM_40_Wizzard/Views/Page4View.xaml.cs | 14 + .../MVVM_40_Wizzard/Views/WizzardView.xaml | 68 + .../MVVM_40_Wizzard/Views/WizzardView.xaml.cs | 14 + .../MVVM_40_WizzardTests/AppTests.cs | 61 + .../Models/ListEntryTests.cs | 67 + .../Models/SimpleLogTests.cs | 109 + .../Models/WizzardModelTests.cs | 139 + .../Properties/SettingsTests.cs | 70 + .../DateTimeValueConverterTests.cs | 72 + .../ViewModels/MainWindowViewModelTests.cs | 54 + .../ViewModels/Page1ViewModelTests.cs | 118 + .../ViewModels/Page2ViewModelTests.cs | 120 + .../ViewModels/Page3ViewModelTests.cs | 141 + .../ViewModels/Page4ViewModelTests.cs | 84 + .../ViewModels/WizzardViewModelTests.cs | 173 + .../Views/MainWindowTests.cs | 61 + .../Views/Page1ViewTests.cs | 61 + .../Views/Page2ViewTests.cs | 61 + .../Views/Page3ViewTests.cs | 61 + .../Views/Page4ViewTests.cs | 74 + .../Views/WizzardViewTests.cs | 73 + CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku.sln | 146 + .../MVVM_Tutorial/MVVM_41_Sudoku/App.xaml | 9 + .../MVVM_Tutorial/MVVM_41_Sudoku/App.xaml.cs | 45 + .../MVVM_41_Sudoku/AssemblyInfo.cs | 10 + .../MVVM_41_Sudoku/MainWindow.xaml | 33 + .../MVVM_41_Sudoku/MainWindow.xaml.cs | 30 + .../MVVM_41_Sudoku/Models/PagePrinter.cs | 74 + .../MVVM_41_Sudoku/Models/SimpleLog.cs | 30 + .../Properties/Resources.Designer.cs | 172 + .../MVVM_41_Sudoku/Properties/Resources.resx | 151 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../MVVM_41_Sudoku/Resources/all64_2.png | Bin 0 -> 91969 bytes .../MVVM_41_Sudoku/ValueConverters/.info | 1 + .../ValueConverters/DateTimeValueConverter.cs | 62 + .../MVVM_41_Sudoku/ViewModels/.info | 1 + .../ViewModels/MainWindowViewModel.cs | 46 + .../ViewModels/SudokuViewModel.cs | 154 + .../MVVM_Tutorial/MVVM_41_Sudoku/Views/.info | 1 + .../Views/Converter/DoubleConverter.cs | 20 + .../MVVM_41_Sudoku/Views/SudokuView.xaml | 111 + .../MVVM_41_Sudoku/Views/SudokuView.xaml.cs | 72 + .../MVVM_41_SudokuTests/AppTests.cs | 62 + .../Models/SimpleLogTests.cs | 68 + .../Models/SudokuPrinterTests.cs | 143 + .../Properties/SettingsTests.cs | 70 + .../DateTimeValueConverterTests.cs | 72 + .../ViewModels/MainWindowViewModelTests.cs | 57 + .../ViewModels/SudokuViewModelTests.cs | 78 + .../Views/MainWindowTests.cs | 61 + .../Views/SudokuViewTests.cs | 61 + .../MVVM_Tutorial/MVVM_99_SomeIssue.sln | 67 + .../MVVM_Tutorial/MVVM_99_SomeIssue/App.xaml | 9 + .../MVVM_99_SomeIssue/App.xaml.cs | 45 + .../MVVM_99_SomeIssue/AssemblyInfo.cs | 10 + .../MVVM_99_SomeIssue/MainWindow.xaml | 33 + .../MVVM_99_SomeIssue/MainWindow.xaml.cs | 30 + .../MVVM_99_SomeIssue/Models/.info | 1 + .../Models/ISomeIssueModel.cs | 40 + .../MVVM_99_SomeIssue/Models/SimpleLog.cs | 30 + .../Models/SomeIssueModel.cs | 83 + .../Properties/Resources.Designer.cs | 118 + .../Properties/Resources.resx | 133 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../MVVM_99_SomeIssue/ValueConverters/.info | 1 + .../ValueConverters/DateTimeValueConverter.cs | 62 + .../MVVM_99_SomeIssue/ViewModels/.info | 1 + .../ViewModels/MainWindowViewModel.cs | 46 + .../ViewModels/SomeIssueViewModel.cs | 55 + .../MVVM_99_SomeIssue/Views/.info | 1 + .../Views/SomeIssueView.xaml | 27 + .../Views/SomeIssueView.xaml.cs | 14 + .../MVVM_99_SomeIssueTests/AppTests.cs | 65 + .../Models/SimpleLogTests.cs | 72 + .../Models/SomeIssueModelTests.cs | 73 + .../Properties/SettingsTests.cs | 70 + .../DateTimeValueConverterTests.cs | 72 + .../ViewModels/MainWindowViewModelTests.cs | 57 + .../ViewModels/SomeIssueViewModelTests.cs | 79 + .../Views/MainWindowTests.cs | 61 + .../Views/SomeIssueViewTests.cs | 61 + .../MVVM_Tutorial/MVVM_AllExamples/App.xaml | 8 + .../MVVM_AllExamples/App.xaml.cs | 75 + .../MVVM_AllExamples/AssemblyInfo.cs | 10 + .../MVVM_AllExamples/MVVM_AllExamples.csproj | 81 + .../MVVM_AllExamples/MainWindow.xaml | 16 + .../MVVM_AllExamples/MainWindow.xaml.cs | 30 + .../MVVM_AllExamples/Models/.info | 1 + .../Models/AllExampleModel.cs | 145 + .../MVVM_AllExamples/Models/ExItem.cs | 37 + .../Models/IAllExampleModel.cs | 43 + .../Properties/Resources.Designer.cs | 71 + .../Properties/Resources.resx | 123 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 6 + .../MVVM_AllExamples/ValueConverters/.info | 1 + .../ValueConverters/DateTimeValueConverter.cs | 62 + .../ListItemToContentConverter.cs | 120 + .../ValueConverters/ToListItemConverter.cs | 29 + .../MVVM_AllExamples/ViewModels/.info | 1 + .../ViewModels/AllExamplesViewModel.cs | 75 + .../ViewModels/MainWindowViewModel.cs | 46 + .../MVVM_AllExamples/Views/.info | 1 + .../Views/AllExamplesView.xaml | 40 + .../Views/AllExamplesView.xaml.cs | 14 + .../MVVM_AllExamplesTests/AppTests.cs | 57 + .../Models/AllExampleModelTests.cs | 66 + .../Properties/SettingsTests.cs | 70 + .../DateTimeValueConverterTests.cs | 72 + .../ViewModels/AllExamplesViewModelTests.cs | 65 + .../ViewModels/MainWindowViewModelTests.cs | 65 + .../Views/AllExamplesViewTests.cs | 61 + .../Views/MainWindowTests.cs | 61 + CSharpBible/MVVM_Tutorial/MVVM_Tutorial.props | 9 + CSharpBible/MVVM_Tutorial/MVVM_Tutorial.sln | 5515 +++++++++++++ .../MVVM_Tutorial.sln.GhostDoc.xml | 91 + .../MVVM_Tutorial/MVVM_Tutorial_net.props | 10 + CSharpBible/MVVM_Tutorial/README_dir.md | 527 ++ CSharpBible/MVVM_Tutorial/ReadMe.md | 123 + .../SyncAsyncParallel/App.config | 6 + .../MVVM_Tutorial/SyncAsyncParallel/App.xaml | 9 + .../SyncAsyncParallel/App.xaml.cs | 23 + .../SyncAsyncParallel/Model/DownloadResult.cs | 36 + .../Model/ISyncAsyncModel.cs | 11 + .../SyncAsyncParallel/Model/SyncAsyncModel.cs | 123 + .../Properties/AssemblyInfo.cs | 68 + .../Properties/Resources.Designer.cs | 62 + .../Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 25 + .../Properties/Settings.settings | 7 + .../SyncAsyncParallel.csproj | 55 + .../SyncAsyncParallel_net.csproj | 50 + .../ViewModels/SyncAsyncViewModel.cs | 75 + .../SyncAsyncParallel/Views/MainWindow.xaml | 13 + .../Views/MainWindow.xaml.cs | 30 + .../Views/SyncAsyncView.xaml | 62 + .../Views/SyncAsyncView.xaml.cs | 30 + CSharpBible/MVVM_Tutorial/WpfApp1/App.config | 6 + CSharpBible/MVVM_Tutorial/WpfApp1/App.xaml | 9 + CSharpBible/MVVM_Tutorial/WpfApp1/App.xaml.cs | 24 + .../MVVM_Tutorial/WpfApp1/AssemblyInfo.cs | 10 + .../MVVM_Tutorial/WpfApp1/MainWindow.xaml | 16 + .../MVVM_Tutorial/WpfApp1/MainWindow.xaml.cs | 31 + .../WpfApp1/Properties/AssemblyInfo.cs | 68 + .../WpfApp1/Properties/Resources.Designer.cs | 63 + .../WpfApp1/Properties/Resources.resx | 101 + .../WpfApp1/Properties/Settings.Designer.cs | 26 + .../WpfApp1/Properties/Settings.settings | 6 + .../WpfApp1/ViewModels/MainWindowViewModel.cs | 42 + CSharpBible/MVVM_Tutorial/WpfApp1/Views/.info | 1 + .../MVVM_Tutorial/WpfApp1/WpfApp.csproj | 46 + .../MVVM_Tutorial/WpfApp1/WpfApp_net.csproj | 45 + .../WpfAppTests/Properties/SettingsTests.cs | 34 + .../ViewModels/MainWindowViewModelTests.cs | 27 + .../WpfAppTests/Views/MainWindowTests.cs | 21 + CSharpBible/MVVM_Tutorial/WpfDemoUI/App.xaml | 9 + .../MVVM_Tutorial/WpfDemoUI/App.xaml.cs | 24 + .../MVVM_Tutorial/WpfDemoUI/AssemblyInfo.cs | 23 + .../WpfDemoUI/ViewModels/ShellViewModel.cs | 92 + .../WpfDemoUI/Views/MainWindow.xaml | 47 + .../WpfDemoUI/Views/MainWindow.xaml.cs | 29 + .../MVVM_Tutorial/WpfDemoUI/WpfDemoUI.csproj | 22 + CSharpBible/MVVM_Tutorial/WpfDemoUI1/App.xaml | 9 + .../MVVM_Tutorial/WpfDemoUI1/App.xaml.cs | 24 + .../MVVM_Tutorial/WpfDemoUI1/AssemblyInfo.cs | 23 + .../WpfDemoUI1/ViewModels/ShellViewModel.cs | 91 + .../WpfDemoUI1/Views/MainWindow.xaml | 47 + .../WpfDemoUI1/Views/MainWindow.xaml.cs | 29 + .../WpfDemoUI1/WpfDemoUI1.csproj | 22 + CSharpBible/MVVM_Tutorial/WpfDemoUI2/App.xaml | 9 + .../MVVM_Tutorial/WpfDemoUI2/App.xaml.cs | 24 + .../MVVM_Tutorial/WpfDemoUI2/AssemblyInfo.cs | 23 + .../WpfDemoUI2/ViewModels/ShellViewModel.cs | 95 + .../WpfDemoUI2/Views/MainWindow.xaml | 26 + .../WpfDemoUI2/Views/MainWindow.xaml.cs | 39 + .../WpfDemoUI2/WpfDemoUI2.csproj | 22 + 1644 files changed, 95081 insertions(+), 1 deletion(-) create mode 100644 CSharpBible/Data/ConsoleApp1/DynamicStateMachine.csproj create mode 100644 CSharpBible/Data/ConsoleApp1/ExampleActions.cs create mode 100644 CSharpBible/Data/ConsoleApp1/IAction.cs create mode 100644 CSharpBible/Data/ConsoleApp1/IStatePredicate.cs create mode 100644 CSharpBible/Data/ConsoleApp1/Program.cs create mode 100644 CSharpBible/Data/ConsoleApp1/SimulationEngine.cs create mode 100644 CSharpBible/Data/ConsoleApp1/StateContext.cs create mode 100644 CSharpBible/Data/ConsoleApp1/StateMachine.cs create mode 100644 CSharpBible/Data/ConsoleApp1/StepDefinition.cs create mode 100644 CSharpBible/Data/ConsoleApp1/Transaction.cs create mode 100644 CSharpBible/MVVM_Tutorial/.info create mode 100644 CSharpBible/MVVM_Tutorial/DemoLibrary/DataAccess.cs create mode 100644 CSharpBible/MVVM_Tutorial/DemoLibrary/DemoLibrary.csproj create mode 100644 CSharpBible/MVVM_Tutorial/DemoLibrary/Models/AddressModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/DemoLibrary/Models/Models.cd create mode 100644 CSharpBible/MVVM_Tutorial/DemoLibrary/Models/PersonModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/DemoLibraryTests/DataAccessTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/DemoLibraryTests/Models/AddressModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/DemoLibraryTests/Models/PersonModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut1/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut1/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut1/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut1/ItemsControlTut1.csproj create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut1/View/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut1/View/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut1/ViewModels/.info create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut2/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut2/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut2/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut2/ItemsControlTut2.csproj create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut2/View/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut2/View/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut2/ViewModels/.info create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut3/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut3/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut3/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut3/ItemsControlTut3.csproj create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut3/ItemsControlTut3_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut3/View/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut3/View/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut3/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut3/ViewModels/ViewModel.cd create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut3_netTests/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut3_netTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut4/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut4/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut4/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut4/ItemsControlTut4.csproj create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut4/ItemsControlTut4_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut4/View/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut4/View/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut4/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut4/ViewModels/ViewModel.cd create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut4_netTests/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/ItemsControlTut4_netTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/ListBinding/App.config create mode 100644 CSharpBible/MVVM_Tutorial/ListBinding/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/ListBinding/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/ListBinding/ListBinding.csproj create mode 100644 CSharpBible/MVVM_Tutorial/ListBinding/ListBinding_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/ListBinding/Model/IPersons.cs create mode 100644 CSharpBible/MVVM_Tutorial/ListBinding/Model/Person.cs create mode 100644 CSharpBible/MVVM_Tutorial/ListBinding/Model/Persons.cs create mode 100644 CSharpBible/MVVM_Tutorial/ListBinding/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/ListBinding/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/ListBinding/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/ListBinding/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/ListBinding/View/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/ListBinding/View/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/ListBinding/View/PersonView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/ListBinding/View/PersonView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/ListBinding/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/ListBinding/ViewModels/PersonViewViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/ListBindingTests/Model/PersonTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/ListBindingTests/Properties/.info create mode 100644 CSharpBible/MVVM_Tutorial/ListBindingTests/View/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/ListBindingTests/View/PersonViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/ListBindingTests/ViewModels/PersonViewViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/ListBindingTests/packages.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Empty.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/Models/ITemplateModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/Models/SimpleLog.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/Models/TemplateModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/ValueConverters/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/ValueConverters/DateTimeValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/ViewModels/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/ViewModels/TemplateViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/Views/TemplateView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/Views/TemplateView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/AppTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/Models/SimpleLogTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/Models/TemplateModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/ValueConverters/DateTimeValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/ViewModels/TemplateViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/Views/TemplateViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Template/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Template/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Template/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Template/MVVM_00_Template.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Template/MVVM_00_Template_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Template/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Template/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Template/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Template/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Template/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Template/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Template/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Template/ValueConverters/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Template/ValueConverters/DateTimeValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Template/ViewModels/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Template/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Template/ViewModels/TemplateViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Template/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Template/Views/TemplateView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_Template/Views/TemplateView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/ValueConverters/DateTimeValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/ViewModels/TemplateViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/Views/TemplateViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/MVVM_00a_CTTemplate.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/MVVM_00a_CTTemplate_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/Models/ITemplateModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/Models/TemplateModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/ValueConverters/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/ValueConverters/DateTimeValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/ViewModels/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/ViewModels/TemplateViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/Views/TemplateView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/Views/TemplateView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/AppTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/Models/TemplateModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/ValueConverters/DateTimeValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/ViewModels/TemplateViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/Views/TemplateViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChange/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChange/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChange/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChange/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChange/MVVM_03_NotifyChange.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChange/MVVM_03_NotifyChange_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChange/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChange/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChange/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChange/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChange/Properties/Resources.de.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChange/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChange/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChange/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChange/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChange/ViewModels/NotifyChangeViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChange/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChange/Views/NotifyChangeView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChange/Views/NotifyChangeView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/ViewModels/NotifyChangeViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/Views/NotifyChangeViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChange/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChange/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChange/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChange/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChange/MVVM_03a_CTNotifyChange.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChange/MVVM_03a_CTNotifyChange_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChange/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChange/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChange/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChange/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChange/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChange/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChange/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChange/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChange/ViewModels/NotifyChangeViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChange/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChange/Views/NotifyChangeView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChange/Views/NotifyChangeView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/ViewModels/NotifyChangeViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/Views/NotifyChangeViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommand/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommand/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommand/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommand/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommand/MVVM_04_DelegateCommand.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommand/MVVM_04_DelegateCommand_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommand/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommand/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommand/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommand/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommand/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommand/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommand/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommand/ViewModels/DelegateCommandViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommand/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommand/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommand/Views/DelegateCommandView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommand/Views/DelegateCommandView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/ViewModels/DelegateCommandViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/Views/DelegateCommandViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommand/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommand/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommand/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommand/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommand/MVVM_04a_CTRelayCommand.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommand/MVVM_04a_CTRelayCommand_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommand/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommand/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommand/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommand/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommand/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommand/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommand/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommand/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommand/ViewModels/RelayCommandViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommand/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommand/Views/RelayCommandView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommand/Views/RelayCommandView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/ViewModels/RelayCommandViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/Views/DelegateCommandViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/MVVM_05_CommandParCalculator.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/MVVM_05_CommandParCalculator_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/Model/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/Model/CalculatorModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/Model/ECalcError.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/Model/ECommands.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/Model/ENumbers.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/Model/EOperations.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/Model/ETrigMode.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/Model/ICalculatorModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/ViewModels/CommandParCalculatorViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/Views/CommandParCalculatorView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/Views/CommandParCalculatorView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/Views/Page1.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/Views/Page1.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculator/Views/ValueConverter/DoubleValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/Model/CalculatorModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/Model/TestCalcModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/ViewModels/CommandParCalculatorViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/Views/CommandParCalculatorViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/Views/Page1Tests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/Views/ValueConverter/DoubleValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Data/ECalcError.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Data/ECommands.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Data/ENumbers.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Data/EOperations.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Data/ETrigMode.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Model/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Model/CalculatorModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Model/Interfaces/ICalculatorModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/ViewModels/CommandParCalculatorViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Views/CommandParCalculatorView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Views/CommandParCalculatorView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Views/Page1.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Views/Page1.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Views/ValueConverter/DoubleValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/Model/CalculatorModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/Model/TestCalcModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/ViewModels/CommandParCalculatorViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/Views/CommandParCalculatorViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/Views/Page1Tests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/Views/ValueConverter/DoubleValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converter.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters/MVVM_06_Converters.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters/MVVM_06_Converters_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters/ValueConverter/CurrencyValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters/View/CurrencyView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters/View/CurrencyView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters/View/Extensions/KeyboardExtensions.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters/ViewModels/CurrencyViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_ConvertersTests/ValueConverter/CurrencyValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_ConvertersTests/View/CurrencyViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_ConvertersTests/View/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_ConvertersTests/ViewModels/CurrencyViewViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_2/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_2/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_2/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_2/MVVM_06_Converters_2.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_2/MVVM_06_Converters_2_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_2/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_2/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_2/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_2/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_2/ValueConverter/CurrencyValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_2/View/Currency2View.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_2/View/Currency2View.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_2/ViewModels/CurrencyViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3/MVVM_06_Converters_3.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3/MVVM_06_Converters_3_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3/ValueConverter/Bool2VisibilityConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3/ValueConverter/CurrencyValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3/View/CurrencyView3.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3/View/CurrencyView3.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3/ViewModels/CurrencyViewViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/ValueConverter/Bool2VisibilityConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/ValueConverter/CurrencyValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/View/CurrencyView3Tests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/View/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/ViewModels/CurrencyViewViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/Model/AGV_Model.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/Model/IAGVModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/ValueConverter/Bool2VisibilityConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/ValueConverter/CurrencyValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/ValueConverter/DoubleValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/View/Converter/WindowPortToGridLines.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/View/PlotFrame.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/View/PlotFrame.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/View/VehicleView1.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/View/VehicleView1.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/ViewModels/CanvasBehavior.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/ViewModels/PlotFrameViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/ViewModels/VehicleViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/Model/AGV_ModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/ValueConverter/Bool2VisibilityConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/ValueConverter/CurrencyValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/ValueConverter/DoubleValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/View/Converter/WindowPortToGridLinesTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/View/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/View/PlotFrameTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/View/VehicleViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/ViewModels/PlotFrameViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/ViewModels/VehicleViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxes.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxes/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxes/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxes/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxes/MVVM_09_DialogBoxes.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxes/MVVM_09_DialogBoxes_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxes/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxes/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxes/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxes/ViewModels/DialogViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxes/ViewModels/DialogWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxes/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxes/Views/DialogView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxes/Views/DialogView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxes/Views/DialogWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxes/Views/DialogWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxes/Views/IDialogWindow.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxes/Views/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxes/Views/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/AppTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/View/DialogViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/View/DialogWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/View/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/ViewModels/DialogViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/ViewModels/DialogWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxes/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxes/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxes/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxes/MVVM_09a_CTDialogBoxes.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxes/MVVM_09a_CTDialogBoxes_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxes/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxes/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxes/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxes/ViewModels/DialogViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxes/ViewModels/DialogWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxes/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxes/Views/DialogView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxes/Views/DialogView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxes/Views/DialogWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxes/Views/DialogWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxes/Views/IDialogWindow.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxes/Views/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxes/Views/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/AppTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/ViewModels/DialogViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/ViewModels/DialogWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/Views/DialogWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/ValueConverters/CurrencyValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/Views/UserColtrolViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol1/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol1/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol1/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol1/MVVM_16_UserControl1.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol1/MVVM_16_UserControl1_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol1/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol1/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol1/ValueConverter/CurrencyValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol1/ViewModels/CurrencyViewViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol1/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol1/ViewModels/UserControlViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol1/Views/DoubleButtonUC.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol1/Views/DoubleButtonUC.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol1/Views/LabeldMaxLengthTextbox.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol1/Views/LabeldMaxLengthTextbox.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol1/Views/UserControlView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol1/Views/UserControlView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol2/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol2/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol2/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol2/MVVM_16_UserControl2.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol2/MVVM_16_UserControl2_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol2/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol2/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol2/ViewModels/UserControlViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol2/Views/TestControl.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol2/Views/UserControlView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol2/Views/UserControlView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/MVVM_17_1_CSV_Laden.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/MVVM_17_1_CSV_Laden_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/Model/CsvModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/Model/DataPoint.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/Resources/RBG_XIst_YIst.csv create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/ViewModels/CanvasBehavior.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/ViewModels/DataPointsViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/ViewModels/SWindowPort.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/Views/Converter/WindowPortToGridLines.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/Views/DataPointsView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/Views/DataPointsView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_18_MultiConverters/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_18_MultiConverters/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_18_MultiConverters/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_18_MultiConverters/MVVM_18_MultiConverters.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_18_MultiConverters/MVVM_18_MultiConverters_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_18_MultiConverters/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_18_MultiConverters/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_18_MultiConverters/Model/DateDifFormat.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_18_MultiConverters/ValueConverter/TimeSpanConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_18_MultiConverters/View/DateDifView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_18_MultiConverters/View/DateDifView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_18_MultiConverters/ViewModels/DateDifViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_18_MultiConvertersTests/Helper/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_18_MultiConvertersTests/ValueConverter/TimeSpanConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_18_MultiConvertersTests/View/DateDifViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_18_MultiConvertersTests/View/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterLists/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterLists/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterLists/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterLists/MVVM_19_FilterLists.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterLists/MVVM_19_FilterLists_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterLists/Model/IPersons.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterLists/Model/Person.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterLists/Model/Persons.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterLists/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterLists/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterLists/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterLists/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterLists/Settings.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterLists/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterLists/ViewModels/PersonViewViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterLists/Views/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterLists/Views/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterLists/Views/PersonView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterLists/Views/PersonView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/Model/PersonTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/Properties/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/ViewModels/PersonViewViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/packages.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20_SysDialogs.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/Converter/ColorConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/Converter/FontConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/MVVM_20_Sysdialogs.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/MVVM_20_Sysdialogs_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/ViewModels/SysDialogsViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/Views/SysDialogsView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/Views/SysDialogsView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/Converter/ColorConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/Converter/FontConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/SysDialogsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/ViewModels/SysDialogsViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/Converter/ColorConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/Converter/FontConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/MVVM_20a_CTSysdialogs.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/MVVM_20a_CTSysdialogs_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/ViewModels/SysDialogsViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/Views/SysDialogs.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/Views/SysDialogs.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/Converter/ColorConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/Converter/FontConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/SysDialogsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/ViewModels/SysDialogsViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_21_Buttons/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_21_Buttons/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_21_Buttons/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_21_Buttons/Converter/BoolToColorConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_21_Buttons/MVVM_21_Buttons.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_21_Buttons/MVVM_21_Buttons_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_21_Buttons/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_21_Buttons/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_21_Buttons/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_21_Buttons/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_21_Buttons/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_21_Buttons/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_21_Buttons/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_21_Buttons/ViewModels/ButtonsViewViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_21_Buttons/Views/ButtonsView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_21_Buttons/Views/ButtonsView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Converter/EnumToColorConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Converter/IntToStringConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Model/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Model/CWpfCapModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Model/IWpfCapModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/ViewModels/WpfCapViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Views/WpfCapView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Views/WpfCapView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/packages.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/AppTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/Converter/EnumToColorStringConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/Converter/IntToStringConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/Model/CWpfCapModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/ViewModels/WpfCapViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/Views/WpfCapViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/app.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/packages.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Converter/EnumToColorConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Converter/IntToStringConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Model/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Model/CWpfCapModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Model/IWpfCapModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/ViewModels/WpfCapViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Views/WpfCapView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Views/WpfCapView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/packages.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/AppTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/Converter/EnumToColorStringConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/Converter/IntToStringConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/Model/CWpfCapModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/ViewModels/WpfCapViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/Views/WpfCapViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/app.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/packages.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControl.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControl/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControl/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControl/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControl/MVVM_24_UserControl.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControl/MVVM_24_UserControl_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControl/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControl/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControl/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControl/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControl/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControl/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControl/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControl/ViewModels/UserControlViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControl/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControl/Views/MaxLengthTextBoxUserControl.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControl/Views/MaxLengthTextBoxUserControl.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControl/Views/UserControlView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControl/Views/UserControlView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/ViewModels/UserControlViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/Views/MaxLengthTBUserControlTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/Views/UserControlViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControl/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControl/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControl/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControl/MVVM_24a_CTUserControl.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControl/MVVM_24a_CTUserControl_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControl/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControl/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControl/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControl/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControl/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControl/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControl/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControl/ViewModels/UserControlViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControl/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControl/Views/MaxLengthTextBoxUserControl.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControl/Views/MaxLengthTextBoxUserControl.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControl/Views/UserControlView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControl/Views/UserControlView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/ViewModels/UserControlViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/Views/MaxLengthTBUserControlTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/Views/UserControlViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/MVVM_24b_UserControl.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/MVVM_24b_UserControl_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/ViewModels/UserControlViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/Views/Converters/BoolToBrushConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/Views/LEDView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/Views/LEDView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/Views/MaxLengthTextBoxUserControl.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/Views/MaxLengthTextBoxUserControl.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/Views/UserControlView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControl/Views/UserControlView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/ViewModels/UserControlViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/Views/Converters/BoolToBrushConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/Views/LEDViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/Views/MaxLengthTBUserControlTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/Views/UserControlViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/MVVM_24c_CTUserControl.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/MVVM_24c_CTUserControl_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/ViewModels/UserControlViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/Views/Converters/BoolToBrushConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/Views/LEDView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/Views/LEDView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/Views/MaxLengthTextBoxUserControl.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/Views/MaxLengthTextBoxUserControl.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/Views/UserControlView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControl/Views/UserControlView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/ViewModels/UserControlViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/Views/Converters/BoolToBrushConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/Views/LEDViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/Views/MaxLengthTBUserControlTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/Views/UserControlViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/CustomWords.lex create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Models/IRichTextEditModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Models/PagePrinter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Models/RichTextEditModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Models/SimpleLog.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Resources/all64_2.png create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/ValueConverters/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/ValueConverters/DateTimeValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/ViewModels/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/ViewModels/Helper/RichTextboxHelper.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/ViewModels/RichTextEditViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Views/RichTextEditView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Views/RichTextEditView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/AppTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/Models/RichTextEditModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/Models/SimpleLogTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/ValueConverters/DateTimeValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/ViewModels/RichTextEditViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/Views/RichTextEditViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_BindingGroupExp/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_BindingGroupExp/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_BindingGroupExp/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_BindingGroupExp/MVVM_26_BindingGroupExp.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_BindingGroupExp/MVVM_26_BindingGroupExp_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_BindingGroupExp/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_BindingGroupExp/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_BindingGroupExp/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_BindingGroupExp/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_BindingGroupExp/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_BindingGroupExp/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_BindingGroupExp/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_BindingGroupExp/ViewModels/BindingGroupViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_BindingGroupExp/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_BindingGroupExp/Views/BindingGroupView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_BindingGroupExp/Views/BindingGroupView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_BindingGroupExp/Views/Validation/FutureDateRule.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_BindingGroupExp/Views/Validation/PriceIsAPositiveNumber.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_BindingGroupExp/Views/Validation/ValidateDateAndPrice.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_CTBindingGroupExp/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_CTBindingGroupExp/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_CTBindingGroupExp/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_CTBindingGroupExp/MVVM_26_CTBindingGroupExp.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_CTBindingGroupExp/MVVM_26_CTBindingGroupExp_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_CTBindingGroupExp/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_CTBindingGroupExp/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_CTBindingGroupExp/Properties/Resources.de.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_CTBindingGroupExp/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_CTBindingGroupExp/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_CTBindingGroupExp/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_CTBindingGroupExp/View/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_CTBindingGroupExp/View/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_CTBindingGroupExp/View/Validation/FutureDateRule.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_CTBindingGroupExp/View/Validation/PriceIsAPositiveNumber.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_CTBindingGroupExp/View/Validation/ValidateDateAndPrice.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_26_CTBindingGroupExp/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/MVVM_27_DataGrid.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/MVVM_27_DataGrid_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/Models/Department.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/Models/Person.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/Properties/Resources.de.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/Services/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/Services/PersonService.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/ValueConverter/EmailValue.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/ViewModels/DatagridViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/Views/DatagridView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGrid/Views/DatagridView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/Models/DepartmrntTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/Models/PersonTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/Services/PersonServiceTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/ValueConverter/EmailValueTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/ViewModels/DataGridViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/Views/DataGridViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/Models/Department.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/Models/Person.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/Properties/Resources.de.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/Services/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/Services/IPersonService.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/Services/PersonService.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/ValueConverter/Bool2VisibilityConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/ValueConverter/EmailValue.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/ViewModels/DatagridViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/Views/DataGridView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/Views/DatagridView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/AppTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/Models/DepartmrntTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/Models/PersonTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/Services/PersonServiceTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/ValueConverter/Bool2VisibilityConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/ValueConverter/EmailValueTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/ViewModels/DataGridViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/Views/DataGridViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/MVVM_28_1_DataGridExt.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/MVVM_28_1_DataGridExt_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/Models/Department.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/Models/Person.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/Properties/Resources.de.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/Services/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/Services/PersonService.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/ValueConverter/Bool2VisibilityConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/ValueConverter/EmailValue.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/ViewModels/DatagridViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/Views/DataGridView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/Views/DatagridView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/Models/DepartmrntTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/Models/PersonTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/Services/PersonServiceTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/ValueConverter/Bool2VisibilityConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/ValueConverter/EmailValueTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/ViewModels/DataGridViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/Views/DataGridViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/MVVM_28_DataGrid.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/MVVM_28_DataGrid_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/Models/Department.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/Models/Person.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/Properties/Resources.de.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/Services/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/Services/PersonService.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/ValueConverter/EmailValue.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/ViewModels/DatagridViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/Views/DataGridView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGrid/Views/DatagridView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/Models/DepartmrntTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/Models/PersonTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/Services/PersonServiceTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/ValueConverter/EmailValueTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/ViewModels/DataGridViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/Views/DataGridViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1/MVVM_31_Validation1.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1/MVVM_31_Validation1_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1/View/ValidationPage.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1/View/ValidationPage.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1/ViewModels/ValidationPageViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/View/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/View/ValidationPageTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/ViewModels/ValidationPageViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2/MVVM_31_Validation2.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2/MVVM_31_Validation2_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2/View/ValidationPage.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2/View/ValidationPage.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2/ViewModels/ValidationPageViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/View/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/View/ValidationPageTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/ViewModels/ValidationPageViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1/MVVM_31a_CTValidation1.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1/MVVM_31a_CTValidation1_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1/View/ValidationPage.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1/View/ValidationPage.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1/ViewModels/ValidationPageViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/View/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/View/ValidationPageTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/ViewModels/ValidationPageViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2/MVVM_31a_CTValidation2.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2/MVVM_31a_CTValidation2_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2/View/ValidationPage.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2/View/ValidationPage.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2/ViewModels/ValidationPageViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/View/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/View/ValidationPageTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/ViewModels/ValidationPageViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3/App.config create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3/MVVM_31a_CTValidation3.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3/MVVM_31a_CTValidation3_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3/Properties/Resources.de.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3/Validator/NotASpecData.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3/View/ValidationPage.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3/View/ValidationPage.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3/ViewModels/ValidationPageViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/Validator/NotTheSpecDataTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/View/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/View/ValidationPageTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/ViewModels/ValidationPageViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/MVVM_33_Events_to_Commands.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/MVVM_33_Events_to_Commands_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/ValueConverters/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/ValueConverters/DateTimeValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/ViewModels/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/ViewModels/EventsBindingViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/Views/EventsBindingView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/Views/EventsBindingView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/ValueConverters/DateTimeValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/ViewModels/EventsBindingViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/Views/EventsBindingViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/MVVM_33a_CTEvents_To_Commands.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/MVVM_33a_CTEvents_To_Commands_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/ValueConverters/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/ValueConverters/DateTimeValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/ViewModels/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/ViewModels/EventsBindingViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/Views/EventsBindingView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/Views/EventsBindingView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/ValueConverters/DateTimeValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/ViewModels/EventsBindingViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/Views/EventsBindingViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/MVVM_34_BindingEventArgs.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/MVVM_34_BindingEventArgs_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/ValueConverters/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/ValueConverters/DateTimeValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/ViewModels/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/ViewModels/EventsBindingViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/Views/EventsBindingView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/Views/EventsBindingView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/ValueConverters/DateTimeValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/ViewModels/EventBindingViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/Views/EventBindingViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/MVVM_34a_CTBindingEventArgs.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/MVVM_34a_CTBindingEventArgs_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/ValueConverters/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/ValueConverters/DateTimeValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/ViewModels/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/ViewModels/EventsBindingViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/Views/EventsBindingView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/Views/EventsBindingView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/ValueConverters/DateTimeValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/ViewModels/EventBindingViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/Views/EventBindingViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/MVVM_35_CommunityToolkit.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/MVVM_35_CommunityToolkit_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/ValueConverters/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/ValueConverters/DateTimeValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/ViewModels/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/ViewModels/CommunitToolkitViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/Views/CommunitToolkitView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/Views/CommunitToolkitView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/ValueConverters/DateTimeValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/ViewModels/CommunitToolkitViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/Views/TemplateViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Models/CommunityToolkit2Model.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Models/ICommunityToolkit2Model.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Models/IUserRepository.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Models/User.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Models/UserRepository.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Properties/Resources.de.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Themes/Generic.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/ValueConverters/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/ValueConverters/Bool2VisibilityConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/ValueConverters/DateTimeValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/ViewModels/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/ViewModels/CommunityToolkit2ViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/ViewModels/LoginViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/ViewModels/ShowLoginMessage.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/ViewModels/UserInfoViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Views/CommunityToolkit2View.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Views/CommunityToolkit2View.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Views/UserControls/LoginControl.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Views/UserControls/LoginControl.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Views/UserControls/UserInfoControl.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Views/UserControls/UserInfoControl.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/AppTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/Models/CommunityToolkit2ModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/Models/UserRepositoryTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/ValueConverters/Bool2VisibilityConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/ValueConverters/DateTimeValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/ViewModels/CommunityToolkit2ViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/ViewModels/LoginViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/ViewModels/TestUserModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/ViewModels/TestUserRepository.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/ViewModels/UserInfoViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/Views/CommunityToolkit2ViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_36_ComToolkitSavesWork.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/Models/Book.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/Models/ITemplateModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/Services/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/Services/BooksService.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/Services/IBooksService.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/ValueConverters/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/ValueConverters/DateTimeValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/ViewModels/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/ViewModels/BooksTreeViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/ViewModels/CategorizedBooksViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/Views/BooksTreeView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/Views/BooksTreeView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/AppTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/Models/BookModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/ValueConverters/DateTimeValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/ViewModels/BooksTreeViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/Views/BooksTreeViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/Models/CLog.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/Models/CSysTime.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/Models/CTimer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/Models/EPermission.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/Models/Interfaces/ILog.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/Models/Interfaces/ISysTime.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/Models/Interfaces/ITemplateModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/Models/Interfaces/ITimer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/Models/Interfaces/IUserRepository.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/Models/TemplateModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/Models/UserRepository.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/ValueConverters/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/ValueConverters/DateTimeValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/ViewModels/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/ViewModels/DependencyInjectionViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/Views/DependencyInjectionView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/Views/DependencyInjectionView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/AppTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/Models/CLogTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/Models/CSysTimeTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/Models/CTimerTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/Models/TemplateModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/Models/UserRepositoryTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/ValueConverters/DateTimeValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/ViewModels/TemplateViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/Views/DependencyInjectionViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModel.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/Models/IScopedModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/Models/ISystemModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/Models/ScopedModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/Models/SystemModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/ValueConverters/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/ValueConverters/DateTimeValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/ViewModels/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/ViewModels/DetailPageViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/ViewModels/MultiModelMainViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/ViewModels/ScopedModelViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/Views/DetailPage1.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/Views/DetailPage1.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/Views/DetailPage2.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/Views/DetailPage2.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/Views/DetailPage3.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/Views/DetailPage3.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/Views/MultiModelMainView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/Views/MultiModelMainView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/Views/ScopedModelView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/Views/ScopedModelView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/AppTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/Models/ScopedModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/Models/SystemModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/ValueConverters/DateTimeValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/ViewModels/DetailPageViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/ViewModels/MultiModelMainViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/ViewModels/ScopedModelViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/Views/DetailPage1Tests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/Views/DetailPage2Tests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/Views/DetailPage3Tests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/Views/MultiModelMainViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/Views/ScopedModelViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Models/Interfaces/IWizzardModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Models/ListEntry.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Models/SimpleLog.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Models/WizzardModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Properties/Resources.de.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Properties/Resources.en.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Properties/Resources.fr.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection0.png create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection0.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection1.png create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection1.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection3.png create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection3.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection4.png create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection4.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection6.png create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection6.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection8.png create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/de/MainSelection0.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/de/MainSelection1.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/de/MainSelection3.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/de/MainSelection4.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/de/MainSelection6.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/de/MainSelection8.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/en/MainSelection0.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/fr/MainSelection0.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ValueConverters/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ValueConverters/DateTimeValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ViewModels/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ViewModels/Page1ViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ViewModels/Page2ViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ViewModels/Page3ViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ViewModels/Page4ViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ViewModels/WizzardViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Views/Page1View.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Views/Page1View.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Views/Page2View.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Views/Page2View.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Views/Page3View.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Views/Page3View.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Views/Page4View.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Views/Page4View.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Views/WizzardView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Views/WizzardView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/AppTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/Models/ListEntryTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/Models/SimpleLogTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/Models/WizzardModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/ValueConverters/DateTimeValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/ViewModels/Page1ViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/ViewModels/Page2ViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/ViewModels/Page3ViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/ViewModels/Page4ViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/ViewModels/WizzardViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/Views/Page1ViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/Views/Page2ViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/Views/Page3ViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/Views/Page4ViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/Views/WizzardViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Models/PagePrinter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Models/SimpleLog.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Resources/all64_2.png create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/ValueConverters/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/ValueConverters/DateTimeValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/ViewModels/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/ViewModels/SudokuViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Views/Converter/DoubleConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Views/SudokuView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Views/SudokuView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/AppTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/Models/SimpleLogTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/Models/SudokuPrinterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/ValueConverters/DateTimeValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/ViewModels/SudokuViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/Views/SudokuViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/Models/ISomeIssueModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/Models/SimpleLog.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/Models/SomeIssueModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/ValueConverters/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/ValueConverters/DateTimeValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/ViewModels/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/ViewModels/SomeIssueViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/Views/SomeIssueView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/Views/SomeIssueView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/AppTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/Models/SimpleLogTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/Models/SomeIssueModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/ValueConverters/DateTimeValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/ViewModels/SomeIssueViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/Views/SomeIssueViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples.csproj create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/Models/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/Models/AllExampleModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/Models/ExItem.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/Models/IAllExampleModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/ValueConverters/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/ValueConverters/DateTimeValueConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/ValueConverters/ListItemToContentConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/ValueConverters/ToListItemConverter.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/ViewModels/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/ViewModels/AllExamplesViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/Views/AllExamplesView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamples/Views/AllExamplesView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/AppTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/Models/AllExampleModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/ValueConverters/DateTimeValueConverterTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/ViewModels/AllExamplesViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/Views/AllExamplesViewTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_Tutorial.props create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_Tutorial.sln create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_Tutorial.sln.GhostDoc.xml create mode 100644 CSharpBible/MVVM_Tutorial/MVVM_Tutorial_net.props create mode 100644 CSharpBible/MVVM_Tutorial/README_dir.md create mode 100644 CSharpBible/MVVM_Tutorial/ReadMe.md create mode 100644 CSharpBible/MVVM_Tutorial/SyncAsyncParallel/App.config create mode 100644 CSharpBible/MVVM_Tutorial/SyncAsyncParallel/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/SyncAsyncParallel/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/SyncAsyncParallel/Model/DownloadResult.cs create mode 100644 CSharpBible/MVVM_Tutorial/SyncAsyncParallel/Model/ISyncAsyncModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/SyncAsyncParallel/Model/SyncAsyncModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/SyncAsyncParallel/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/SyncAsyncParallel/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/SyncAsyncParallel/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/SyncAsyncParallel/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/SyncAsyncParallel/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/SyncAsyncParallel/SyncAsyncParallel.csproj create mode 100644 CSharpBible/MVVM_Tutorial/SyncAsyncParallel/SyncAsyncParallel_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/SyncAsyncParallel/ViewModels/SyncAsyncViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/SyncAsyncParallel/Views/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/SyncAsyncParallel/Views/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/SyncAsyncParallel/Views/SyncAsyncView.xaml create mode 100644 CSharpBible/MVVM_Tutorial/SyncAsyncParallel/Views/SyncAsyncView.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfApp1/App.config create mode 100644 CSharpBible/MVVM_Tutorial/WpfApp1/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/WpfApp1/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfApp1/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfApp1/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/WpfApp1/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfApp1/Properties/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfApp1/Properties/Resources.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfApp1/Properties/Resources.resx create mode 100644 CSharpBible/MVVM_Tutorial/WpfApp1/Properties/Settings.Designer.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfApp1/Properties/Settings.settings create mode 100644 CSharpBible/MVVM_Tutorial/WpfApp1/ViewModels/MainWindowViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfApp1/Views/.info create mode 100644 CSharpBible/MVVM_Tutorial/WpfApp1/WpfApp.csproj create mode 100644 CSharpBible/MVVM_Tutorial/WpfApp1/WpfApp_net.csproj create mode 100644 CSharpBible/MVVM_Tutorial/WpfAppTests/Properties/SettingsTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfAppTests/ViewModels/MainWindowViewModelTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfAppTests/Views/MainWindowTests.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI/ViewModels/ShellViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI/Views/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI/Views/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI/WpfDemoUI.csproj create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI1/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI1/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI1/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI1/ViewModels/ShellViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI1/Views/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI1/Views/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI1/WpfDemoUI1.csproj create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI2/App.xaml create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI2/App.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI2/AssemblyInfo.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI2/ViewModels/ShellViewModel.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI2/Views/MainWindow.xaml create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI2/Views/MainWindow.xaml.cs create mode 100644 CSharpBible/MVVM_Tutorial/WpfDemoUI2/WpfDemoUI2.csproj diff --git a/CSharpBible/AboutEx/AboutEx.csproj b/CSharpBible/AboutEx/AboutEx.csproj index 7f0109d5f..f20164a3c 100644 --- a/CSharpBible/AboutEx/AboutEx.csproj +++ b/CSharpBible/AboutEx/AboutEx.csproj @@ -14,7 +14,7 @@ - + diff --git a/CSharpBible/Data/ConsoleApp1/DynamicStateMachine.csproj b/CSharpBible/Data/ConsoleApp1/DynamicStateMachine.csproj new file mode 100644 index 000000000..b51c7ccfc --- /dev/null +++ b/CSharpBible/Data/ConsoleApp1/DynamicStateMachine.csproj @@ -0,0 +1,11 @@ + + + + Exe + net9.0 + enable + true + true + + + diff --git a/CSharpBible/Data/ConsoleApp1/ExampleActions.cs b/CSharpBible/Data/ConsoleApp1/ExampleActions.cs new file mode 100644 index 000000000..6d0749ba5 --- /dev/null +++ b/CSharpBible/Data/ConsoleApp1/ExampleActions.cs @@ -0,0 +1,87 @@ +using System; + +namespace ConsoleApp1; + +// 6. Beispielaktionen und Prädikate +public class ExampleActions +{ + public class ActionExample : IAction + { + public string Name => "ExampleAction"; + public string Execute(StateContext context) + { + // Beispiel für eine Aktion + Console.WriteLine($"Executing {Name} in state {context.CurrentState}"); + context.AddData("LastAction", Name); + return "SUCCESS"; + } + } + + public class ConditionalAction : IAction + { + public string Name => "ConditionalAction"; + public string Execute(StateContext context) + { + if (context.GetData("RequiredCondition") == "Met") + { + Console.WriteLine($"Executing {Name} in state {context.CurrentState}"); + return "SUCCESS"; + } + return "FAILED"; + } + } + + public class StateChangeAction : IAction + { + public string Name => "StateChangeAction"; + public string Execute(StateContext context) + { + context.AddData("StateChangeRequested", true); + return "TRANSITION"; + } + } + + public class SaveStateAction : IAction + { + public string Name => "SaveStateAction"; + public string Execute(StateContext context) + { + Console.WriteLine("Saving state..."); + context.AddData("StateSaved", DateTime.Now.ToString()); + return "SAVE_NEEDED"; + } + } + + // Beispielprädikate + public class DataPredicate : IStatePredicate + { + public string Key { get; } + public string Value { get; } + public string Message => $"Check for {Key} == {Value}"; + + public DataPredicate(string key, string value) + { + Key = key; + Value = value; + } + + public bool Check(StateContext context) + { + var data = context.GetData(Key); + return data == Value; + } + } + + public class TimeBasedPredicate : IStatePredicate + { + public string Message => "Time-based condition"; + + public bool Check(StateContext context) + { + // Beispiel für zeitbasierte Bedingung + var lastActionTime = context.GetData("LastActionTime"); + return lastActionTime.HasValue && + DateTime.Now - lastActionTime.Value > TimeSpan.FromMinutes(5); + } + } +} diff --git a/CSharpBible/Data/ConsoleApp1/IAction.cs b/CSharpBible/Data/ConsoleApp1/IAction.cs new file mode 100644 index 000000000..a0f5ee9ff --- /dev/null +++ b/CSharpBible/Data/ConsoleApp1/IAction.cs @@ -0,0 +1,8 @@ +namespace ConsoleApp1; + +// 1. Interfaces für Aktionen und Prädikate +public interface IAction +{ + string Name { get; } + string Execute(StateContext context); +} diff --git a/CSharpBible/Data/ConsoleApp1/IStatePredicate.cs b/CSharpBible/Data/ConsoleApp1/IStatePredicate.cs new file mode 100644 index 000000000..951f1104f --- /dev/null +++ b/CSharpBible/Data/ConsoleApp1/IStatePredicate.cs @@ -0,0 +1,7 @@ +namespace ConsoleApp1; + +public interface IStatePredicate +{ + bool Check(StateContext context); + string Message { get; } +} diff --git a/CSharpBible/Data/ConsoleApp1/Program.cs b/CSharpBible/Data/ConsoleApp1/Program.cs new file mode 100644 index 000000000..078d14cba --- /dev/null +++ b/CSharpBible/Data/ConsoleApp1/Program.cs @@ -0,0 +1,17 @@ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; + +namespace ConsoleApp1; + +// 8. Main-Klasse +class Program +{ + static void Main(string[] args) + { + var sim = new SimulationEngine(); + sim.Start(); + } +} \ No newline at end of file diff --git a/CSharpBible/Data/ConsoleApp1/SimulationEngine.cs b/CSharpBible/Data/ConsoleApp1/SimulationEngine.cs new file mode 100644 index 000000000..1f57b6a17 --- /dev/null +++ b/CSharpBible/Data/ConsoleApp1/SimulationEngine.cs @@ -0,0 +1,114 @@ +using System; +using System.Timers; + +namespace ConsoleApp1; + +// 7. Beispielklasse für die Simulation +public class SimulationEngine +{ + private StateMachine _stateMachine = new(); + private System.Timers.Timer _monitorTimer; + + public SimulationEngine() + { + // Beispielaktionen registrieren + _stateMachine.AddTransaction(new Transaction + { + Name = "InitialSetup", + Steps = new() { "InitialStep" }, + StartStep = new() { Name = "InitialStep" }, + Dependencies = new() + }); + + // Schrittdefinitionen hinzufügen + var initialStep = new StepDefinition + { + Name = "InitialStep", + Actions = new() + { + new ExampleActions.ActionExample(), + new ExampleActions.SaveStateAction() + } + }; + + _stateMachine.AddStepDefinition(initialStep); + _stateMachine.AddTransaction(new Transaction + { + Name = "InitialSetup", + Steps = new() { "InitialStep" }, + StartStep = new() { Name = "InitialStep" }, + }); + + // Timer für Überwachung und Interaktion + _monitorTimer = new Timer(5000); // Jede 5 Sekunden + _monitorTimer.Elapsed += MonitorSimulation; + } + + public void Start() + { + _monitorTimer.Start(); + Console.WriteLine("Simulation gestartet. Verwende 'help' für Hilfe."); + MonitorSimulation(null, null); + } + + private void MonitorSimulation(object sender, ElapsedEventArgs e) + { + Console.WriteLine("\n=== Aktueller Zustand ==="); + Console.WriteLine($"Zustand: {_stateMachine.CurrentState}"); + + Console.WriteLine("\nVerfügbare Transaktionen:"); + foreach (var tx in _stateMachine.Transactions) + { + Console.WriteLine($" - {tx.Key}"); + } + + Console.Write("\n> "); + var input = Console.ReadLine()?.ToLower(); + + if (input == "exit") + { + _monitorTimer.Stop(); + Environment.Exit(0); + } + else if (input == "help") + { + Console.WriteLine("\nVerfügbare Befehle:"); + Console.WriteLine(" - help: Zeige diese Hilfe"); + Console.WriteLine(" - exit: Beende die Simulation"); + Console.WriteLine(" - [Transaktionsname]: Führe eine Transaktion aus"); + Console.WriteLine(" - save [dateiname]: Speichere den aktuellen Zustand"); + Console.WriteLine(" - load [dateiname]: Lade einen Zustand"); + } + else if (input?.StartsWith("save") == true) + { + var filename = input.Substring(5).Trim(); + if (!string.IsNullOrEmpty(filename)) + { + _stateMachine.SaveState(filename); + Console.WriteLine($"Zustand wurde gespeichert in {filename}"); + } + else + { + Console.WriteLine("Bitte einen Dateinamen angeben"); + } + } + else if (input?.StartsWith("load") == true) + { + var filename = input.Substring(5).Trim(); + if (!string.IsNullOrEmpty(filename)) + { + _stateMachine.LoadState(filename); + Console.WriteLine($"Zustand wurde geladen aus {filename}"); + } + else + { + Console.WriteLine("Bitte einen Dateinamen angeben"); + } + } + else if (!string.IsNullOrEmpty(input)) + { + // Führe eine Transaktion aus + _stateMachine.ExecuteTransaction(input); + } + } +} diff --git a/CSharpBible/Data/ConsoleApp1/StateContext.cs b/CSharpBible/Data/ConsoleApp1/StateContext.cs new file mode 100644 index 000000000..a098337bd --- /dev/null +++ b/CSharpBible/Data/ConsoleApp1/StateContext.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; + +namespace ConsoleApp1; + +// 2. StateContext für die Umgebung der Simulation +public class StateContext +{ + public string CurrentState { get; set; } + public Dictionary Data { get; } = new(); + + public void AddData(string key, object value) + { + Data[key] = value; + } + + public T GetData(string key) + { + if (Data.TryGetValue(key, out var val) && val is T tVal) + { + return tVal; + } + return default(T); + } +} diff --git a/CSharpBible/Data/ConsoleApp1/StateMachine.cs b/CSharpBible/Data/ConsoleApp1/StateMachine.cs new file mode 100644 index 000000000..ae41c8bed --- /dev/null +++ b/CSharpBible/Data/ConsoleApp1/StateMachine.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Xml.Serialization; + +namespace ConsoleApp1; + +// 5. Dynamische Zustandsmaschine +public class StateMachine +{ + private Dictionary _stepDefinitions = new(); + private Dictionary _transactions = new(); + private string _currentState = "Initial"; + public string CurrentState => _currentState; + public Dictionary Transactions => _transactions; + private StateContext _context = new(); + + public void AddStepDefinition(StepDefinition step) + { + _stepDefinitions[step.Name] = step; + } + + public void AddTransaction(Transaction tx) + { + _transactions[tx.Name] = tx; + } + + public void ExecuteTransaction(string transactionName) + { + if (!_transactions.ContainsKey(transactionName)) + { + throw new ArgumentException($"Transaction '{transactionName}' not found"); + } + + var tx = _transactions[transactionName]; + ExecuteTransaction(tx); + } + + private void ExecuteTransaction(Transaction tx) + { + // Prüfe vorab auf Abhängigkeiten + foreach (var dependency in tx.Dependencies) + { + if (!_transactions.ContainsKey(dependency.Name) || + !_transactions[dependency.Name].Steps.Contains(tx.Name)) + { + throw new InvalidOperationException($"Dependency '{dependency}' not satisfied for transaction '{tx.Name}'"); + } + } + + // Führe Schritte der Transaktion aus + foreach (var stepName in tx.Steps) + { + var step = _stepDefinitions[stepName]; + foreach (var action in step.Actions) + { + var result = action.Execute(_context); + HandleActionResult(result); + } + } + + // Nach Ausführung des Transaktionsablaufes den Zustand aktualisieren + _currentState = tx.Name; + } + + private void HandleActionResult(string result) + { + // Beispiel: Ergebnisse verarbeiten, die Zustände beeinflussen + switch (result) + { + case "ERROR": + _context.AddData("LastError", "Ablaufabbruch"); + break; + case "TRANSITION": + // Hier könnte eine Zustandsänderung initiiert werden + break; + case "SAVE_NEEDED": + // Speichervorschlag + break; + } + } + + public void SaveState(string filename) + { + using (var writer = new StreamWriter(filename)) + { + var serializer = new XmlSerializer(typeof(StateContext)); + serializer.Serialize(writer, _context); + } + } + + public void LoadState(string filename) + { + if (!File.Exists(filename)) return; + + using (var reader = new StreamReader(filename)) + { + var serializer = new XmlSerializer(typeof(StateContext)); + _context = (StateContext)serializer.Deserialize(reader); + } + } +} diff --git a/CSharpBible/Data/ConsoleApp1/StepDefinition.cs b/CSharpBible/Data/ConsoleApp1/StepDefinition.cs new file mode 100644 index 000000000..a34731244 --- /dev/null +++ b/CSharpBible/Data/ConsoleApp1/StepDefinition.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; + +namespace ConsoleApp1; + +// 3. Schrittdefinition mit Aktionen und Prädikaten +public class StepDefinition +{ + public string Name { get; set; } + public List Actions { get; init; } = new(); + public List Conditions { get; } = new(); +} diff --git a/CSharpBible/Data/ConsoleApp1/Transaction.cs b/CSharpBible/Data/ConsoleApp1/Transaction.cs new file mode 100644 index 000000000..00e86ab1a --- /dev/null +++ b/CSharpBible/Data/ConsoleApp1/Transaction.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; + +namespace ConsoleApp1; + +// 4. Transaktionsklasse für Ablauflogik +public class Transaction +{ + public string Name { get; set; } + public StepDefinition StartStep { get; set; } + public List Steps { get; init; } = new(); + public List Dependencies { get; init; } = new(); +} diff --git a/CSharpBible/MVVM_Tutorial/.info b/CSharpBible/MVVM_Tutorial/.info new file mode 100644 index 000000000..5949d29a6 --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/.info @@ -0,0 +1 @@ +Folder for MVVM-Tutorial diff --git a/CSharpBible/MVVM_Tutorial/DemoLibrary/DataAccess.cs b/CSharpBible/MVVM_Tutorial/DemoLibrary/DataAccess.cs new file mode 100644 index 000000000..528c0d3f9 --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/DemoLibrary/DataAccess.cs @@ -0,0 +1,160 @@ +// *********************************************************************** +// Assembly : DemoLibrary +// Author : Mir +// Created : 08-11-2022 +// +// Last Modified By : Mir +// Last Modified On : 06-17-2022 +// *********************************************************************** +// +// Copyright (c) JC-Soft. All rights reserved. +// +// +// *********************************************************************** +using DemoLibrary.Models; +using System; +using System.Collections.Generic; + +namespace DemoLibrary +{ + /// + /// Class DataAccess. + /// + public static class DataAccess + { + /// + /// The random + /// + public static Func GetNext { get; set; } = (mn, mx) => (_rnd ??= new Random()).Next(mn, mx); + /// + /// The street addresses + /// + static readonly string[] streetAddresses = { "101 State Street", "425 Oak Avenue", "7 Wallace Way", "928 Ecclesia Place", "123 Winbur House", "543 Venture Drive", "29 Main Avenue" }; + /// + /// The cities + /// + static readonly string[] cities = { "Springfield", "Wilshire", "Alexandria", "Franklin", "Clinton", "Fairview", "Boulder", "Denver", "Evangeline", "Georgetown", "Halifax", "Iconia", "Madison" }; + /// + /// The states + /// + static readonly string[] states = { "AZ", "CA", "DL", "FL", "GA", "IL", "OK", "PA", "TX", "VA", "WA", "WI" }; + /// + /// The zip codes + /// + static readonly string[] zipCodes = { "14121", "08904", "84732", "23410", "60095", "90210", "10456", "60618", "00926", "08701", "90280", "92335", "79936" }; + + /// + /// The first names + /// + static readonly string[] firstNames = { "Andrew", "Bob", "Carla", "Dany", "Earl", "Frank", "Georgina", "Henry", "Inez", "John", "Karl", "Lenny", "Monique", "Norbert", "Oscar", "Paula", "Quentin", "Richard", "Steve", "Urban", "Victor", "Walter", "Xavier", "Yvonne", "Zaharias" }; + /// + /// The last names + /// + static readonly string[] lastNames = { "Smith", "Jones", "Garcia", "Hernandez", "Miller", "Santiago", "Thomas", "Lee", "Taylor", "Widmark" }; + /// + /// The last names + /// + static readonly string[] titles = { "", "", "", "", "", "Dr.", "Prof.", "Prof. Dr.", "Dr. med.", "Dipl.Ing.", "M.D.", "M.D." }; + /// + /// The alive statuses + /// + static readonly bool[] aliveStatuses = { true, false }; + /// + /// The low end date + /// + static readonly DateTime lowEndDate = new(1943, 1, 1); + /// + /// The days from low date + /// + static readonly int daysFromLowDate = (DateTime.Today - lowEndDate).Days; + private static Random _rnd; + + // public DataAccess() { + // daysFromLowDate = (DateTime.Today - lowEndDate).Days; + // } + + /// + /// Gets the people. + /// + /// The total. + /// List<PersonModel>. + static public List GetPeople(int total = 10) + { + var output = new List(); + for (int i = 0; i < total; i++) + { + output.Add(GetPerson(i + 1)); + } + return output; + } + + /// + /// Gets the person. + /// + /// The identifier. + /// PersonModel. + static public PersonModel GetPerson(int id = 1) + { + var output = new PersonModel + { + PersonId = id, + FirstNames = GetRandomItem(firstNames), + LastName = GetRandomItem(lastNames), + IsAlive = GetRandomItem(aliveStatuses), + Title = GetRandomItem(titles), + DateOfBirth = GetRandomDate(), + AccountBalance = ((decimal)GetNext(1, 1000000) / 100), + }; + output.Age = GetAgeInYears(output.DateOfBirth); + + int addressCount = GetNext(1, 5); + for (int i = 0; i < addressCount; i++) + { + output.Addresses.Add(GetAddress((id - 1) * 5 + i + 1)); + } + output.PrimaryAddress = output.Addresses[GetNext(0, addressCount - 1)]; + return output; + } + + /// + /// Gets the address. + /// + /// The identifier. + /// AddressModel. + static private AddressModel GetAddress(int id = 1) + { + var output = new AddressModel + { + AddressId = id, + StreetAddress = GetRandomItem(streetAddresses), + City = GetRandomItem(cities), + State = GetRandomItem(states), + ZipCode = GetRandomItem(zipCodes) + }; + return output; + } + + /// + /// Gets the random item. + /// + /// + /// The items. + /// T. + static private T GetRandomItem(T[] Items) => Items[GetNext(0, Items.Length)]; + /// + /// Gets the random date. + /// + /// DateTime. + static private DateTime GetRandomDate() => lowEndDate.AddDays(GetNext(0, daysFromLowDate)); + /// + /// Gets the age in years. + /// + /// The birthday. + /// System.Int32. + static private int GetAgeInYears(DateTime birthday) + { + int age = DateTime.Now.Year - birthday.Year; + return DateTime.Now < birthday.AddYears(age) ? age - 1 : age; + } + } +} diff --git a/CSharpBible/MVVM_Tutorial/DemoLibrary/DemoLibrary.csproj b/CSharpBible/MVVM_Tutorial/DemoLibrary/DemoLibrary.csproj new file mode 100644 index 000000000..afd183f21 --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/DemoLibrary/DemoLibrary.csproj @@ -0,0 +1,19 @@ + + + + Library + net6.0;net7.0;net8.0;net481;net48;net472;net462 + + + + + + + + + + + + + + diff --git a/CSharpBible/MVVM_Tutorial/DemoLibrary/Models/AddressModel.cs b/CSharpBible/MVVM_Tutorial/DemoLibrary/Models/AddressModel.cs new file mode 100644 index 000000000..85c46dc29 --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/DemoLibrary/Models/AddressModel.cs @@ -0,0 +1,69 @@ +// *********************************************************************** +// Assembly : DemoLibrary +// Author : Mir +// Created : 08-11-2022 +// +// Last Modified By : Mir +// Last Modified On : 06-17-2022 +// *********************************************************************** +// +// Copyright (c) JC-Soft. All rights reserved. +// +// +// *********************************************************************** + +namespace DemoLibrary.Models +{ + /// + /// Class AddressModel. + /// + public class AddressModel { + /// + /// Gets or sets the address identifier. + /// + /// The address identifier. + public int AddressId { get; set; } + /// + /// Gets or sets the additional line. + /// + /// The additional line. + public string AdditionalLine { get; set; } = ""; + /// + /// Gets or sets the street address. + /// + /// The street address. + public string StreetAddress { get; set; } = ""; + /// + /// Gets or sets the city. + /// + /// The city. + public string City { get; set; } = ""; + /// + /// Gets or sets the state. + /// + /// The state. + public string State { get; set; } = ""; + /// + /// Gets or sets the zip code. + /// + /// The zip code. + public string ZipCode { get; set; } = ""; + /// + /// Gets or sets the country. + /// + /// The country. + public string Country { get; set; } = ""; + + /// + /// Gets the full address. + /// + /// The full address. + public string FullAddress => $"{StreetAddress}, {City}, {State} {ZipCode}, {Country}".Trim(new char[]{ ' ', ',' }); + + /// + /// Returns a that represents this instance. + /// + /// A that represents this instance. + public override string ToString() => FullAddress; + } +} diff --git a/CSharpBible/MVVM_Tutorial/DemoLibrary/Models/Models.cd b/CSharpBible/MVVM_Tutorial/DemoLibrary/Models/Models.cd new file mode 100644 index 000000000..a63aaa03e --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/DemoLibrary/Models/Models.cd @@ -0,0 +1,24 @@ + + + + + + AQBAAAAAABAAAMAEAEAAAIAIAAAQAAAAAAAAAAAAAAg= + Models\PersonModel.cs + + + + + + + + + + + + AAAAAAAAAAAAAQAMAAAAAEAAAAIAAAABAAQABAAAABA= + Models\AddressModel.cs + + + + \ No newline at end of file diff --git a/CSharpBible/MVVM_Tutorial/DemoLibrary/Models/PersonModel.cs b/CSharpBible/MVVM_Tutorial/DemoLibrary/Models/PersonModel.cs new file mode 100644 index 000000000..78d9ea9f0 --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/DemoLibrary/Models/PersonModel.cs @@ -0,0 +1,79 @@ +// *********************************************************************** +// Assembly : DemoLibrary +// Author : Mir +// Created : 08-11-2022 +// +// Last Modified By : Mir +// Last Modified On : 06-14-2022 +// *********************************************************************** +// +// Copyright (c) JC-Soft. All rights reserved. +// +// +// *********************************************************************** +using System; +using System.Collections.Generic; + +namespace DemoLibrary.Models +{ + /// + /// Class PersonModel. + /// + public class PersonModel { + /// + /// Gets or sets the person identifier. + /// + /// The person identifier. + public int PersonId { get; set; } + /// + /// Gets or sets the title. + /// + /// The title. + public string Title { get; set; } = ""; + /// + /// Gets or sets the first names. + /// + /// The first names. + public string FirstNames { get; set; } = ""; + /// + /// Gets or sets the last name. + /// + /// The last name. + public string LastName { get; set; } = ""; + /// + /// Gets or sets the age. + /// + /// The age. + public int Age { get; set; } + /// + /// Gets or sets the date of birth. + /// + /// The date of birth. + public DateTime DateOfBirth { get; set; } + /// + /// Gets or sets a value indicating whether this instance is alive. + /// + /// true if this instance is alive; otherwise, false. + public bool IsAlive { get; set; } + /// + /// Gets or sets the account balance. + /// + /// The account balance. + public decimal AccountBalance { get; set; } + /// + /// The addresses + /// + public List Addresses = new(); + /// + /// Gets or sets the primary address. + /// + /// The primary address. + public AddressModel? PrimaryAddress { get; set; } + /// + /// Gets the full name. + /// + /// The full name. + public string FullName => $"{Title} {FirstNames} {LastName}".TrimStart(' '); + + } +} diff --git a/CSharpBible/MVVM_Tutorial/DemoLibraryTests/DataAccessTests.cs b/CSharpBible/MVVM_Tutorial/DemoLibraryTests/DataAccessTests.cs new file mode 100644 index 000000000..6b3a1bca2 --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/DemoLibraryTests/DataAccessTests.cs @@ -0,0 +1,57 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; + +namespace DemoLibrary.Tests +{ + [TestClass()] + public class DataAccessTests + { + private Random _rnd; + + [TestInitialize] + public void Init() + { + _rnd = new Random(0); + _ = DataAccess.GetNext(0, 5); + DataAccess.GetNext = (mn, mx) => _rnd.Next(mn, mx); + } + + [TestMethod()] + [DataRow(0, "Prof. Steve Taylor")] + [DataRow(1, "Dr. med. Richard Santiago")] + [DataRow(2, "M.D. Andrew Hernandez")] + [DataRow(3, "Dr. med. Dany Garcia")] + [DataRow(4, "M.D. Paula Garcia")] + [DataRow(5, "Quentin Lee")] + [DataRow(6, "Dipl.Ing. Quentin Miller")] + [DataRow(7, "Quentin Smith")] + [DataRow(8, "M.D. Henry Lee")] + [DataRow(9, "Dr. med. Karl Widmark")] + public void GetPeopleTest(int iNr, string sExp) + { + var peoples = DataAccess.GetPeople(); + Assert.AreEqual(10, peoples.Count); + for (int i = 0; i < peoples.Count; i++) + Assert.AreEqual(sExp, peoples[iNr].FullName, $"p[{iNr}].FullName"); + } + + [TestMethod()] + [DataRow(0, "Prof. Steve Taylor")] + [DataRow(1, "Dipl.Ing. Georgina Jones")] + [DataRow(2, "M.D. Urban Miller")] + [DataRow(3, "Henry Thomas")] + [DataRow(4, "Victor Widmark")] + [DataRow(5, "Prof. Dr. Inez Garcia")] + [DataRow(6, "M.D. Walter Santiago")] + [DataRow(7, "John Taylor")] + [DataRow(8, "Xavier Jones")] + [DataRow(9, "Dr. Karl Miller")] + [DataRow(10, "Dr. med. Yvonne Lee")] + [DataRow(11, "M.D. Lenny Smith")] + public void GetPersonTest(int iVal, string sExp) + { + _rnd = new Random(iVal); + Assert.AreEqual(sExp, DataAccess.GetPerson().FullName); + } + } +} \ No newline at end of file diff --git a/CSharpBible/MVVM_Tutorial/DemoLibraryTests/Models/AddressModelTests.cs b/CSharpBible/MVVM_Tutorial/DemoLibraryTests/Models/AddressModelTests.cs new file mode 100644 index 000000000..6a87e38f6 --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/DemoLibraryTests/Models/AddressModelTests.cs @@ -0,0 +1,70 @@ +// *********************************************************************** +// Assembly : DemoLibraryTests +// Author : Mir +// Created : 08-11-2022 +// +// Last Modified By : Mir +// Last Modified On : 08-26-2022 +// *********************************************************************** +// +// Copyright (c) JC-Soft. All rights reserved. +// +// +// *********************************************************************** +using Microsoft.VisualStudio.TestTools.UnitTesting; +using DemoLibrary.Models; + +namespace DemoLibraryTests.Models +{ + /// + /// Defines test class AddressModelTests. + /// + [TestClass()] + public class AddressModelTests { + /// + /// The c exp to string1 + /// + private readonly string cExpToString1="1, 4, 2 3, 5"; + + /// + /// Converts to stringtest. + /// + /// a street. + /// a city. + /// a state. + /// a zip. + /// a. + /// The exp to string. + [TestMethod()] + [DataRow("1", "2", "3", "4", "5", "1, 2, 3 4, 5")] + [DataRow("123 test street","Los Angelos","WI","90210","", "123 test street, Los Angelos, WI 90210")] + [DataRow("321 ocean drive", "Santa Monica", "CA", "90901", "USA", "321 ocean drive, Santa Monica, CA 90901, USA")] + public void ToStringTest(string aStreet, string aCity,string aState, string aZip, string aCountry,string ExpToString) { + var model = new AddressModel() { + StreetAddress = aStreet, + AdditionalLine="", + State = aState, + ZipCode = aZip, + City = aCity, + Country = aCountry, + }; + Assert.AreEqual(ExpToString,model.ToString()); + } + + /// + /// Defines the test method ToStringTest1. + /// + [TestMethod()] + public void ToStringTest1() { + var model = new AddressModel() + { + StreetAddress = "1", + State = "2", + ZipCode = "3", + City = "4", + Country = "5" + }; + Assert.AreEqual(cExpToString1, model.ToString()); + } + } +} diff --git a/CSharpBible/MVVM_Tutorial/DemoLibraryTests/Models/PersonModelTests.cs b/CSharpBible/MVVM_Tutorial/DemoLibraryTests/Models/PersonModelTests.cs new file mode 100644 index 000000000..471ec9497 --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/DemoLibraryTests/Models/PersonModelTests.cs @@ -0,0 +1,57 @@ +// *********************************************************************** +// Assembly : DemoLibraryTests +// Author : Mir +// Created : 08-11-2022 +// +// Last Modified By : Mir +// Last Modified On : 06-19-2022 +// *********************************************************************** +// +// Copyright (c) JC-Soft. All rights reserved. +// +// +// *********************************************************************** +using Microsoft.VisualStudio.TestTools.UnitTesting; +using DemoLibrary.Models; + +namespace DemoLibraryTests.Models +{ + + /// + /// Defines test class PersonModelTests. + /// + [TestClass] + public class PersonModelTests { + + /// + /// Defines the test method TestPerson. + /// + [TestMethod()] + public void TestPerson() { + PersonModel model = new(); + Assert.IsNotNull(model); + } + + /// + /// Tests the person fullName. + /// + /// a first names. + /// a last name. + /// a title. + /// The exp fullName. + [TestMethod()] + [DataRow("","","","")] + [DataRow("", "1", "", "1")] + [DataRow("1", "2", "", "1 2")] + [DataRow("1", "2", "3", "3 1 2")] + [DataRow("Peter", "Mustermann", "Dr.", "Dr. Peter Mustermann")] + public void TestPersonFullName(string aFirstNames, string aLastName, string aTitle, string expFullName) { + PersonModel model = new() { + FirstNames = aFirstNames, + LastName = aLastName, + PrimaryAddress=null, + Title= aTitle }; + Assert.AreEqual(expFullName, model.FullName); + } + } +} diff --git a/CSharpBible/MVVM_Tutorial/ItemsControlTut1/App.xaml b/CSharpBible/MVVM_Tutorial/ItemsControlTut1/App.xaml new file mode 100644 index 000000000..bbec7a2f2 --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/ItemsControlTut1/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/CSharpBible/MVVM_Tutorial/ItemsControlTut1/App.xaml.cs b/CSharpBible/MVVM_Tutorial/ItemsControlTut1/App.xaml.cs new file mode 100644 index 000000000..a9a4741d6 --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/ItemsControlTut1/App.xaml.cs @@ -0,0 +1,24 @@ +// *********************************************************************** +// Assembly : ItemsControlTut1 +// Author : Mir +// Created : 06-16-2022 +// +// Last Modified By : Mir +// Last Modified On : 06-09-2022 +// *********************************************************************** +// +// Copyright (c) JC-Soft. All rights reserved. +// +// +// *********************************************************************** +using System.Windows; + +namespace ItemsControlTut1 +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/CSharpBible/MVVM_Tutorial/ItemsControlTut1/AssemblyInfo.cs b/CSharpBible/MVVM_Tutorial/ItemsControlTut1/AssemblyInfo.cs new file mode 100644 index 000000000..2ecc86240 --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/ItemsControlTut1/AssemblyInfo.cs @@ -0,0 +1,23 @@ +// *********************************************************************** +// Assembly : ItemsControlTut1 +// Author : Mir +// Created : 06-16-2022 +// +// Last Modified By : Mir +// Last Modified On : 06-09-2022 +// *********************************************************************** +// +// Copyright (c) JC-Soft. All rights reserved. +// +// +// *********************************************************************** +using System.Windows; + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] diff --git a/CSharpBible/MVVM_Tutorial/ItemsControlTut1/ItemsControlTut1.csproj b/CSharpBible/MVVM_Tutorial/ItemsControlTut1/ItemsControlTut1.csproj new file mode 100644 index 000000000..34b415588 --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/ItemsControlTut1/ItemsControlTut1.csproj @@ -0,0 +1,40 @@ + + + + WinExe + net8.0-windows + true + + + + + + + + + + + + True + basic + + + + False + full + + + + + + + + + + + + + + + + diff --git a/CSharpBible/MVVM_Tutorial/ItemsControlTut1/View/MainWindow.xaml b/CSharpBible/MVVM_Tutorial/ItemsControlTut1/View/MainWindow.xaml new file mode 100644 index 000000000..ad74bc8e3 --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/ItemsControlTut1/View/MainWindow.xaml @@ -0,0 +1,19 @@ + + + + ItemsControl Item #1 + ItemsControl Item #2 + ItemsControl Item #3 + ItemsControl Item #4 + ItemsControl Item #5 + + + diff --git a/CSharpBible/MVVM_Tutorial/ItemsControlTut1/View/MainWindow.xaml.cs b/CSharpBible/MVVM_Tutorial/ItemsControlTut1/View/MainWindow.xaml.cs new file mode 100644 index 000000000..cb3c934ef --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/ItemsControlTut1/View/MainWindow.xaml.cs @@ -0,0 +1,31 @@ +// *********************************************************************** +// Assembly : ItemsControlTut1 +// Author : Mir +// Created : 06-16-2022 +// +// Last Modified By : Mir +// Last Modified On : 06-09-2022 +// *********************************************************************** +// +// Copyright (c) JC-Soft. All rights reserved. +// +// +// *********************************************************************** +using System.Windows; + +namespace ItemsControlTut1.View +{ + /// + /// Interaction logic for MainWindow.xaml + /// + public partial class MainWindow : Window + { + /// + /// Initializes a new instance of the class. + /// + public MainWindow() + { + InitializeComponent(); + } + } +} diff --git a/CSharpBible/MVVM_Tutorial/ItemsControlTut1/ViewModels/.info b/CSharpBible/MVVM_Tutorial/ItemsControlTut1/ViewModels/.info new file mode 100644 index 000000000..5949d29a6 --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/ItemsControlTut1/ViewModels/.info @@ -0,0 +1 @@ +Folder for MVVM-Tutorial diff --git a/CSharpBible/MVVM_Tutorial/ItemsControlTut2/App.xaml b/CSharpBible/MVVM_Tutorial/ItemsControlTut2/App.xaml new file mode 100644 index 000000000..9a3ed1faa --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/ItemsControlTut2/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/CSharpBible/MVVM_Tutorial/ItemsControlTut2/App.xaml.cs b/CSharpBible/MVVM_Tutorial/ItemsControlTut2/App.xaml.cs new file mode 100644 index 000000000..9592540f4 --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/ItemsControlTut2/App.xaml.cs @@ -0,0 +1,24 @@ +// *********************************************************************** +// Assembly : ItemsControlTut2 +// Author : Mir +// Created : 06-16-2022 +// +// Last Modified By : Mir +// Last Modified On : 08-14-2022 +// *********************************************************************** +// +// Copyright (c) JC-Soft. All rights reserved. +// +// +// *********************************************************************** +using System.Windows; + +namespace ItemsControlTut2 +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/CSharpBible/MVVM_Tutorial/ItemsControlTut2/AssemblyInfo.cs b/CSharpBible/MVVM_Tutorial/ItemsControlTut2/AssemblyInfo.cs new file mode 100644 index 000000000..669988a40 --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/ItemsControlTut2/AssemblyInfo.cs @@ -0,0 +1,23 @@ +// *********************************************************************** +// Assembly : ItemsControlTut2 +// Author : Mir +// Created : 06-16-2022 +// +// Last Modified By : Mir +// Last Modified On : 06-09-2022 +// *********************************************************************** +// +// Copyright (c) JC-Soft. All rights reserved. +// +// +// *********************************************************************** +using System.Windows; + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] diff --git a/CSharpBible/MVVM_Tutorial/ItemsControlTut2/ItemsControlTut2.csproj b/CSharpBible/MVVM_Tutorial/ItemsControlTut2/ItemsControlTut2.csproj new file mode 100644 index 000000000..8eae5283d --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/ItemsControlTut2/ItemsControlTut2.csproj @@ -0,0 +1,36 @@ + + + + + WinExe + net6.0-windows;net7.0-windows;net8.0-windows + true + + + + + + + + + + + + False + full + + + + + + + + + + + + + + + + diff --git a/CSharpBible/MVVM_Tutorial/ItemsControlTut2/View/MainWindow.xaml b/CSharpBible/MVVM_Tutorial/ItemsControlTut2/View/MainWindow.xaml new file mode 100644 index 000000000..5355697bc --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/ItemsControlTut2/View/MainWindow.xaml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + /// The last name. + /// The first name. + /// The title. + public Person(string lastName, string firstName, string title="") + { + (FirstName, LastName, Title) = (firstName, lastName, title); + } + + /// + /// Initializes a new instance of the class. + /// + /// The full name. + public Person(string fullName) + : this(fullName.Split(',')[0].Trim(), + fullName.Split(',').Length > 1 ? fullName.Split(',')[1].Trim():"", + fullName.Split(',').Length > 2 ? fullName.Split(',')[2].Trim():"") + {} + + /// + /// Initializes a new instance of the class. + /// + public Person() { } + + /// + /// + /// Returns a that represents this instance. + /// + /// A that represents this instance. + public override string ToString() + { + return $"{Id}, {FullName}"; + } + #endregion + } +} diff --git a/CSharpBible/MVVM_Tutorial/ListBinding/Model/Persons.cs b/CSharpBible/MVVM_Tutorial/ListBinding/Model/Persons.cs new file mode 100644 index 000000000..727dc0064 --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/ListBinding/Model/Persons.cs @@ -0,0 +1,68 @@ +using ListBinding.Properties; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.IO; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace ListBinding.Model +{ + public class Persons : IPersons, IEnumerable + { + /// + /// The persons + /// + private ObservableCollection persons = new ObservableCollection(); + + public Persons() + { + + if (string.IsNullOrEmpty(Settings.Default.Data)) + persons = new ObservableCollection(); + else + try + { + // Construct an instance of the XmlSerializer with the type + // of object that is being deserialized. + var mySerializer = new XmlSerializer(typeof(ObservableCollection)); + // To read the file, create a FileStream. + using var myFileStream = new MemoryStream(); + byte[] b; + myFileStream.Write(b = Encoding.UTF8.GetPreamble(), 0, b.Length); + myFileStream.Write(b = Encoding.UTF8.GetBytes(Settings.Default.Data), 0, b.Length); + myFileStream.Position = 0; + // Call the Deserialize method and cast to the object type. + persons = (ObservableCollection)mySerializer.Deserialize(myFileStream); + } + catch { persons = new ObservableCollection(); } + } + class Utf8StringWriter : StringWriter + { + public override Encoding Encoding => Encoding.UTF8; + } + + ~Persons() + { + // Insert code to set properties and fields of the object. + XmlSerializer mySerializer = new(typeof(ObservableCollection)); + // To write to a file, create a StreamWriter object. + StringWriter myWriter = new Utf8StringWriter(); + XmlTextWriter xmlTextWriter = new XmlTextWriter(myWriter); + xmlTextWriter.Formatting = Formatting.Indented; + xmlTextWriter.Indentation = 2; + mySerializer.Serialize(xmlTextWriter, persons); + myWriter.Close(); + Settings.Default.Data = myWriter.ToString(); + Settings.Default.Save(); + } + ObservableCollection IPersons.Persons => persons; + + public IEnumerator GetEnumerator() + => persons.GetEnumerator(); + + IEnumerator IEnumerable.GetEnumerator() + => persons.GetEnumerator(); + } +} diff --git a/CSharpBible/MVVM_Tutorial/ListBinding/Properties/Resources.Designer.cs b/CSharpBible/MVVM_Tutorial/ListBinding/Properties/Resources.Designer.cs new file mode 100644 index 000000000..3bfb7882e --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/ListBinding/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// Dieser Code wurde von einem Tool generiert. +// Laufzeitversion:4.0.30319.42000 +// +// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn +// der Code erneut generiert wird. +// +//------------------------------------------------------------------------------ + +namespace ListBinding.Properties { + using System; + + + /// + /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. + /// + // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert + // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. + // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen + // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ListBinding.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle + /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/CSharpBible/MVVM_Tutorial/ListBinding/Properties/Resources.resx b/CSharpBible/MVVM_Tutorial/ListBinding/Properties/Resources.resx new file mode 100644 index 000000000..af7dbebba --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/ListBinding/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/CSharpBible/MVVM_Tutorial/ListBinding/Properties/Settings.Designer.cs b/CSharpBible/MVVM_Tutorial/ListBinding/Properties/Settings.Designer.cs new file mode 100644 index 000000000..0ce1562cd --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/ListBinding/Properties/Settings.Designer.cs @@ -0,0 +1,46 @@ +//------------------------------------------------------------------------------ +// +// Dieser Code wurde von einem Tool generiert. +// Laufzeitversion:4.0.30319.42000 +// +// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn +// der Code erneut generiert wird. +// +//------------------------------------------------------------------------------ + +namespace ListBinding.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.5.0.0")] + public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute(@" + + + Care + Joe + Dr, + 1 + +")] + public string Data { + get { + return ((string)(this["Data"])); + } + set { + this["Data"] = value; + } + } + } +} diff --git a/CSharpBible/MVVM_Tutorial/ListBinding/Properties/Settings.settings b/CSharpBible/MVVM_Tutorial/ListBinding/Properties/Settings.settings new file mode 100644 index 000000000..ded0e17ed --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/ListBinding/Properties/Settings.settings @@ -0,0 +1,17 @@ + + + + + + <?xml version="1.0" encoding="utf-8"?> +<ArrayOfPerson xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <Person> + <LastName>Care</LastName> + <FirstName>Joe</FirstName> + <Title>Dr,</Title> + <Id>1</Id> + </Person> +</ArrayOfPerson> + + + \ No newline at end of file diff --git a/CSharpBible/MVVM_Tutorial/ListBinding/View/MainWindow.xaml b/CSharpBible/MVVM_Tutorial/ListBinding/View/MainWindow.xaml new file mode 100644 index 000000000..bff7091a6 --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/ListBinding/View/MainWindow.xaml @@ -0,0 +1,13 @@ + + + + + diff --git a/CSharpBible/MVVM_Tutorial/ListBinding/View/MainWindow.xaml.cs b/CSharpBible/MVVM_Tutorial/ListBinding/View/MainWindow.xaml.cs new file mode 100644 index 000000000..1aedbd78f --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/ListBinding/View/MainWindow.xaml.cs @@ -0,0 +1,31 @@ +// *********************************************************************** +// Assembly : ListBinding +// Author : Mir +// Created : 12-24-2021 +// +// Last Modified By : Mir +// Last Modified On : 12-24-2021 +// *********************************************************************** +// +// Copyright © JC-Soft 2021 +// +// +// *********************************************************************** +using System.Windows; + +namespace ListBinding.View +{ + /// + /// Interaktionslogik für MainWindow.xaml + /// + public partial class MainWindow : Window + { + /// + /// Initializes a new instance of the class. + /// + public MainWindow() + { + InitializeComponent(); + } + } +} diff --git a/CSharpBible/MVVM_Tutorial/ListBinding/View/PersonView.xaml b/CSharpBible/MVVM_Tutorial/ListBinding/View/PersonView.xaml new file mode 100644 index 000000000..5a8e0a3ac --- /dev/null +++ b/CSharpBible/MVVM_Tutorial/ListBinding/View/PersonView.xaml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +