diff --git a/CSharpBible/Data/TraceCsv2realCsvTests/TraceCsv2realCsvTests - Backup.csproj b/CSharpBible/Data/TraceCsv2realCsvTests/TraceCsv2realCsvTests - Backup.csproj
deleted file mode 100644
index 0f6a8f4c5..000000000
--- a/CSharpBible/Data/TraceCsv2realCsvTests/TraceCsv2realCsvTests - Backup.csproj
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
- net462-windows;net472-windows;net48-windows;net481-windows;net6.0;net7.0
- true
- C:\Projekte\CSharp\bin\TraceCsv2realCsvTests\Debug\net7.0\fine-code-coverage\coverage-tool-output\TraceCsv2realCsvTests %28net7.0%29-fcc-mscodecoverage-generated.runsettings
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/CSharpBible/Graphics/Graphics.sln b/CSharpBible/Graphics/Graphics.sln
index 3d63a3173..d6465df19 100644
--- a/CSharpBible/Graphics/Graphics.sln
+++ b/CSharpBible/Graphics/Graphics.sln
@@ -95,6 +95,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PolySpline", "PolySpline\Po
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PolySpline_net", "PolySpline\PolySpline_net.csproj", "{EF90C4A7-DB44-4672-A4A5-E7D9996587BC}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_ImageHandling_netTests", "MVVM_ImageHandlingTests\MVVM_ImageHandling_netTests.csproj", "{74702CB8-336B-4AE0-990C-4E1914F720E2}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_ImageHandlingTests", "MVVM_ImageHandlingTests\MVVM_ImageHandlingTests.csproj", "{B1FCD6F4-2DBF-4AC7-AD62-64E830E83764}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -249,6 +253,14 @@ Global
{EF90C4A7-DB44-4672-A4A5-E7D9996587BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EF90C4A7-DB44-4672-A4A5-E7D9996587BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EF90C4A7-DB44-4672-A4A5-E7D9996587BC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {74702CB8-336B-4AE0-990C-4E1914F720E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {74702CB8-336B-4AE0-990C-4E1914F720E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {74702CB8-336B-4AE0-990C-4E1914F720E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {74702CB8-336B-4AE0-990C-4E1914F720E2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B1FCD6F4-2DBF-4AC7-AD62-64E830E83764}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B1FCD6F4-2DBF-4AC7-AD62-64E830E83764}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B1FCD6F4-2DBF-4AC7-AD62-64E830E83764}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B1FCD6F4-2DBF-4AC7-AD62-64E830E83764}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/CSharpBible/Graphics/MVVM_ImageHandlingTests/AppTests.cs b/CSharpBible/Graphics/MVVM_ImageHandlingTests/AppTests.cs
index 1d8e7c04c..ac52e81e0 100644
--- a/CSharpBible/Graphics/MVVM_ImageHandlingTests/AppTests.cs
+++ b/CSharpBible/Graphics/MVVM_ImageHandlingTests/AppTests.cs
@@ -1,13 +1,12 @@
-using CommunityToolkit.Mvvm.DependencyInjection;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-using MVVM.View.Extension;
-using MVVM_ImageHandling.Models;
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using MVVM.View.Extension;
+using MVVM_ImageHandling.Models;
namespace MVVM_ImageHandling.Tests
{
@@ -53,7 +52,7 @@ public void AppTest()
public void AppTest2()
{
app.DoStartUp();
- Assert.IsNotNull(IoC.GetReqSrv(typeof(IUserRepository)));
+ Assert.IsNotNull(IoC.GetReqSrv(typeof(ITemplateModel)));
Assert.IsNull(IoC.GetSrv(typeof(App)));
}
}
diff --git a/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandlingTests.csproj b/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandlingTests.csproj
index 360fb2351..effa78abe 100644
--- a/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandlingTests.csproj
+++ b/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandlingTests.csproj
@@ -1,17 +1,18 @@
-
+
net462-windows;net472-windows;net48-windows;net481-windows
true
false
+ true
-
-
-
-
+
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandling_netTests.csproj b/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandling_netTests.csproj
index 5ac49e7d6..ff7155292 100644
--- a/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandling_netTests.csproj
+++ b/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandling_netTests.csproj
@@ -1,17 +1,18 @@
-
+
- net6.0-windows;net7.0-windows
+ net6.0-windows;net7.0-windows;net8.0-windows
true
false
-
-
-
-
+
+
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/Graphics/MVVM_ImageHandlingTests/ViewModels/TemplateViewModelTests.cs b/CSharpBible/Graphics/MVVM_ImageHandlingTests/ViewModels/TemplateViewModelTests.cs
index 9e8104106..acacce71d 100644
--- a/CSharpBible/Graphics/MVVM_ImageHandlingTests/ViewModels/TemplateViewModelTests.cs
+++ b/CSharpBible/Graphics/MVVM_ImageHandlingTests/ViewModels/TemplateViewModelTests.cs
@@ -33,7 +33,7 @@ public class TemplateViewModelTests:BaseTestViewModel
/// The test model
///
///
- TemplateViewModel testModel;
+ ImageViewModel testModel;
#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.
///
@@ -58,7 +58,7 @@ public void Init()
public void SetupTest()
{
Assert.IsNotNull(testModel);
- Assert.IsInstanceOfType(testModel, typeof(TemplateViewModel));
+ Assert.IsInstanceOfType(testModel, typeof(ImageViewModel));
Assert.IsInstanceOfType(testModel, typeof(BaseViewModelCT));
Assert.IsInstanceOfType(testModel, typeof(INotifyPropertyChanged));
}
diff --git a/CSharpBible/Graphics/Polyline/Polyline2.csproj b/CSharpBible/Graphics/Polyline/Polyline2.csproj
index 17cea2f4d..a6fbd86b8 100644
--- a/CSharpBible/Graphics/Polyline/Polyline2.csproj
+++ b/CSharpBible/Graphics/Polyline/Polyline2.csproj
@@ -99,7 +99,6 @@
ResXFileCodeGenerator
Resources.Designer.cs
-
SettingsSingleFileGenerator
Settings.Designer.cs
@@ -111,8 +110,5 @@
MVVM_BaseLib
-
-
-
\ No newline at end of file
diff --git a/CSharpBible/Libraries/MVVM_BaseLib/Helper/MVVM/CRandom.cs b/CSharpBible/Libraries/MVVM_BaseLib/Helper/MVVM/CRandom.cs
index 2ee16ccb1..b3e783745 100644
--- a/CSharpBible/Libraries/MVVM_BaseLib/Helper/MVVM/CRandom.cs
+++ b/CSharpBible/Libraries/MVVM_BaseLib/Helper/MVVM/CRandom.cs
@@ -1,4 +1,5 @@
-using System;
+using BaseLib.Interfaces;
+using System;
namespace BaseLib.Helper.MVVM;
@@ -11,7 +12,7 @@ public CRandom()
_random = new Random();
}
- public int Next(int v1, int v2) => _random.Next(v1, v2);
+ public int Next(int v1, int v2) => v2 !=-1 || v1 _random.NextDouble();
diff --git a/CSharpBible/Libraries/MVVM_BaseLib/Helper/MVVM/IRandom.cs b/CSharpBible/Libraries/MVVM_BaseLib/Helper/MVVM/IRandom.cs
deleted file mode 100644
index 2a476abd2..000000000
--- a/CSharpBible/Libraries/MVVM_BaseLib/Helper/MVVM/IRandom.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace BaseLib.Helper.MVVM;
-
-public interface IRandom
-{
- int Next(int v1, int v2);
- double NextDouble();
- int NextInt();
- void Seed(int value);
-}
diff --git a/CSharpBible/Libraries/MVVM_BaseLib/Helper/StreamHelpers.cs b/CSharpBible/Libraries/MVVM_BaseLib/Helper/StreamHelpers.cs
index e77d8cd9f..82dc25abc 100644
--- a/CSharpBible/Libraries/MVVM_BaseLib/Helper/StreamHelpers.cs
+++ b/CSharpBible/Libraries/MVVM_BaseLib/Helper/StreamHelpers.cs
@@ -102,18 +102,18 @@ public static void EnumerateToStream(this Stream stream, IEnumerable<(string, ob
streamBytes = new byte[sizeof(int)];
stream.Read(streamBytes, 0, sizeof(int));
var count32 = BitConverter.ToInt32(streamBytes, 0);
- var result = new IPersistence[count32];
+ var result = new IPersistence?[count32];
if (t2.IsClass && t2.GetConstructors().FirstOrDefault(c => c.IsPublic)!=null)
for (var i =0;i();
}
- yield return (e.Item1, result.Select(b => b.ReadFromEnumerable(stream.StreamToEnumerable(b.PropTypes))?b:null).ToList());
+ yield return (e.Item1, result.Select(b => b?.ReadFromEnumerable(stream.StreamToEnumerable(b!.PropTypes))??false?b:null).ToList());
break;
}
}
diff --git a/CSharpBible/Libraries/MVVM_BaseLib/Interfaces/IRandom.cs b/CSharpBible/Libraries/MVVM_BaseLib/Interfaces/IRandom.cs
new file mode 100644
index 000000000..fcb45ab39
--- /dev/null
+++ b/CSharpBible/Libraries/MVVM_BaseLib/Interfaces/IRandom.cs
@@ -0,0 +1,46 @@
+// ***********************************************************************
+// Assembly : MVVM_BaseLib
+// Author : Mir
+// Created : 07-01-2024
+//
+// Last Modified By : Mir
+// Last Modified On : 07-01-2024
+// ***********************************************************************
+//
+// Copyright © JC-Soft 2023
+//
+//
+// ***********************************************************************
+///
+/// The Interfaces namespace.
+///
+namespace BaseLib.Interfaces;
+
+///
+/// Interface IRandom
+///
+public interface IRandom
+{
+ ///
+ /// Gets the next random number between v1 and v2 if v2 is set, between 0 and v1 if v2 is not set.
+ ///
+ /// The first boarder
+ /// The second boarder
+ /// System.Int32.
+ int Next(int v1, int v2=-1);
+ ///
+ /// Gets the next random number as double between ]0 and 1[.
+ ///
+ /// System.Double.
+ double NextDouble();
+ ///
+ /// Gets the next random number as int.
+ ///
+ /// System.Int32.
+ int NextInt();
+ ///
+ /// Specifies the seed-value.
+ ///
+ /// The value.
+ void Seed(int value);
+}
diff --git a/CSharpBible/Libraries/MVVM_BaseLib/ViewModel/BaseViewModel.cs b/CSharpBible/Libraries/MVVM_BaseLib/ViewModel/BaseViewModel.cs
index 1173fd600..a9c81bdf1 100644
--- a/CSharpBible/Libraries/MVVM_BaseLib/ViewModel/BaseViewModel.cs
+++ b/CSharpBible/Libraries/MVVM_BaseLib/ViewModel/BaseViewModel.cs
@@ -22,9 +22,9 @@ namespace MVVM.ViewModel;
///
/// Class BaseViewModel.
-/// Implements the
+/// Implements the
///
-///
+///
public abstract class BaseViewModel : NotificationObject, IPropertyBinding
{
#region Properties
@@ -125,7 +125,7 @@ public bool AddPropertyDependency(string prop1, string prop2,bool xForce=false )
public bool RemovePropertyDependency(string prop1, string prop2)
{
- throw new System.NotImplementedException();
+ throw new NotImplementedException();
}
///
diff --git a/CSharpBible/Libraries/MVVM_BaseLib/ViewModel/BaseViewModelCT.cs b/CSharpBible/Libraries/MVVM_BaseLib/ViewModel/BaseViewModelCT.cs
index ee0fb9898..25519aad4 100644
--- a/CSharpBible/Libraries/MVVM_BaseLib/ViewModel/BaseViewModelCT.cs
+++ b/CSharpBible/Libraries/MVVM_BaseLib/ViewModel/BaseViewModelCT.cs
@@ -126,7 +126,7 @@ public bool AddPropertyDependency(string prop1, string prop2,bool xForce=false )
public bool RemovePropertyDependency(string prop1, string prop2)
{
- throw new System.NotImplementedException();
+ throw new NotImplementedException();
}
///
diff --git a/CSharpBible/Libraries/MVVM_BaseLib/ViewModel/BindableCollection.cs b/CSharpBible/Libraries/MVVM_BaseLib/ViewModel/BindableCollection.cs
index ea0474738..c17625c7e 100644
--- a/CSharpBible/Libraries/MVVM_BaseLib/ViewModel/BindableCollection.cs
+++ b/CSharpBible/Libraries/MVVM_BaseLib/ViewModel/BindableCollection.cs
@@ -230,5 +230,5 @@ private void ExecuteAction(Action action)
///
/// The action.
/// An extension point for subclasses to customize how property change notifications are handled.
- protected virtual void OnUIThread(System.Action action) => action.Invoke();
+ protected virtual void OnUIThread(Action action) => action.Invoke();
}
diff --git a/CSharpBible/Libraries/MVVM_BaseLibTests/Helper/MVVM/CRandomTests.cs b/CSharpBible/Libraries/MVVM_BaseLibTests/Helper/MVVM/CRandomTests.cs
index e15743de0..46cecc7c7 100644
--- a/CSharpBible/Libraries/MVVM_BaseLibTests/Helper/MVVM/CRandomTests.cs
+++ b/CSharpBible/Libraries/MVVM_BaseLibTests/Helper/MVVM/CRandomTests.cs
@@ -1,4 +1,5 @@
-using Microsoft.VisualStudio.TestTools.UnitTesting;
+using BaseLib.Interfaces;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
using static BaseLib.Helper.TestHelper;
namespace BaseLib.Helper.MVVM.Tests;
diff --git a/CSharpBible/Libraries/MVVM_BaseLibTests/View/Extension/IoCTests.cs b/CSharpBible/Libraries/MVVM_BaseLibTests/View/Extension/IoCTests.cs
index 18e90e337..70294916f 100644
--- a/CSharpBible/Libraries/MVVM_BaseLibTests/View/Extension/IoCTests.cs
+++ b/CSharpBible/Libraries/MVVM_BaseLibTests/View/Extension/IoCTests.cs
@@ -29,7 +29,7 @@ private IServiceScope GetScope()
{
DoLog($"GetScope()");
IServiceScope serviceScope = Substitute.For();
- serviceScope.ServiceProvider.GetService(typeof(IServiceScopeFactory)).Returns
///
-namespace MVVM_22_WpfCap.View.Tests
+namespace MVVM_22_WpfCap.Views.Tests
{
///
/// Defines test class TemplateViewTests.
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit.sln b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit.sln
index c6ff30f9c..b533bdb3f 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit.sln
+++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit.sln
@@ -26,36 +26,82 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_25_RichTextEdit_netTes
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_25_RichTextEditTests", "MVVM_25_RichTextEditTests\MVVM_25_RichTextEditTests.csproj", "{7FF12BBB-AA2E-48C1-B283-0665570902F8}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommonDialogs", "..\Libraries\CommonDialogs\CommonDialogs.csproj", "{BC3F2FCE-0AA3-413F-BC36-D6EEFFC1964B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommonDialogs_net", "..\Libraries\CommonDialogs\CommonDialogs_net.csproj", "{7CF63553-BD9F-4999-B6D8-669405EA230E}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
+ Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
+ Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{890CF504-3814-443B-9EE6-E8BCACF68203}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{890CF504-3814-443B-9EE6-E8BCACF68203}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {890CF504-3814-443B-9EE6-E8BCACF68203}.Debug|x86.ActiveCfg = Debug|x86
+ {890CF504-3814-443B-9EE6-E8BCACF68203}.Debug|x86.Build.0 = Debug|x86
{890CF504-3814-443B-9EE6-E8BCACF68203}.Release|Any CPU.ActiveCfg = Release|Any CPU
{890CF504-3814-443B-9EE6-E8BCACF68203}.Release|Any CPU.Build.0 = Release|Any CPU
+ {890CF504-3814-443B-9EE6-E8BCACF68203}.Release|x86.ActiveCfg = Release|x86
+ {890CF504-3814-443B-9EE6-E8BCACF68203}.Release|x86.Build.0 = Release|x86
{66EB60F2-523D-47C8-95EA-C7E10759E239}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{66EB60F2-523D-47C8-95EA-C7E10759E239}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {66EB60F2-523D-47C8-95EA-C7E10759E239}.Debug|x86.ActiveCfg = Debug|x86
+ {66EB60F2-523D-47C8-95EA-C7E10759E239}.Debug|x86.Build.0 = Debug|x86
{66EB60F2-523D-47C8-95EA-C7E10759E239}.Release|Any CPU.ActiveCfg = Release|Any CPU
{66EB60F2-523D-47C8-95EA-C7E10759E239}.Release|Any CPU.Build.0 = Release|Any CPU
+ {66EB60F2-523D-47C8-95EA-C7E10759E239}.Release|x86.ActiveCfg = Release|x86
+ {66EB60F2-523D-47C8-95EA-C7E10759E239}.Release|x86.Build.0 = Release|x86
{16A3E367-674C-4959-8B31-7681B0E8258C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{16A3E367-674C-4959-8B31-7681B0E8258C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {16A3E367-674C-4959-8B31-7681B0E8258C}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {16A3E367-674C-4959-8B31-7681B0E8258C}.Debug|x86.Build.0 = Debug|Any CPU
{16A3E367-674C-4959-8B31-7681B0E8258C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{16A3E367-674C-4959-8B31-7681B0E8258C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {16A3E367-674C-4959-8B31-7681B0E8258C}.Release|x86.ActiveCfg = Release|Any CPU
+ {16A3E367-674C-4959-8B31-7681B0E8258C}.Release|x86.Build.0 = Release|Any CPU
{D6BFC652-822A-4E7D-9846-7F529C584BAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D6BFC652-822A-4E7D-9846-7F529C584BAC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D6BFC652-822A-4E7D-9846-7F529C584BAC}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {D6BFC652-822A-4E7D-9846-7F529C584BAC}.Debug|x86.Build.0 = Debug|Any CPU
{D6BFC652-822A-4E7D-9846-7F529C584BAC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D6BFC652-822A-4E7D-9846-7F529C584BAC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D6BFC652-822A-4E7D-9846-7F529C584BAC}.Release|x86.ActiveCfg = Release|Any CPU
+ {D6BFC652-822A-4E7D-9846-7F529C584BAC}.Release|x86.Build.0 = Release|Any CPU
{A7844F45-74D9-4A81-9C27-D0E17ED0F851}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A7844F45-74D9-4A81-9C27-D0E17ED0F851}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A7844F45-74D9-4A81-9C27-D0E17ED0F851}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {A7844F45-74D9-4A81-9C27-D0E17ED0F851}.Debug|x86.Build.0 = Debug|Any CPU
{A7844F45-74D9-4A81-9C27-D0E17ED0F851}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A7844F45-74D9-4A81-9C27-D0E17ED0F851}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A7844F45-74D9-4A81-9C27-D0E17ED0F851}.Release|x86.ActiveCfg = Release|Any CPU
+ {A7844F45-74D9-4A81-9C27-D0E17ED0F851}.Release|x86.Build.0 = Release|Any CPU
{7FF12BBB-AA2E-48C1-B283-0665570902F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7FF12BBB-AA2E-48C1-B283-0665570902F8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7FF12BBB-AA2E-48C1-B283-0665570902F8}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {7FF12BBB-AA2E-48C1-B283-0665570902F8}.Debug|x86.Build.0 = Debug|Any CPU
{7FF12BBB-AA2E-48C1-B283-0665570902F8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7FF12BBB-AA2E-48C1-B283-0665570902F8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7FF12BBB-AA2E-48C1-B283-0665570902F8}.Release|x86.ActiveCfg = Release|Any CPU
+ {7FF12BBB-AA2E-48C1-B283-0665570902F8}.Release|x86.Build.0 = Release|Any CPU
+ {BC3F2FCE-0AA3-413F-BC36-D6EEFFC1964B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BC3F2FCE-0AA3-413F-BC36-D6EEFFC1964B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BC3F2FCE-0AA3-413F-BC36-D6EEFFC1964B}.Debug|x86.ActiveCfg = Debug|x86
+ {BC3F2FCE-0AA3-413F-BC36-D6EEFFC1964B}.Debug|x86.Build.0 = Debug|x86
+ {BC3F2FCE-0AA3-413F-BC36-D6EEFFC1964B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BC3F2FCE-0AA3-413F-BC36-D6EEFFC1964B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BC3F2FCE-0AA3-413F-BC36-D6EEFFC1964B}.Release|x86.ActiveCfg = Release|x86
+ {BC3F2FCE-0AA3-413F-BC36-D6EEFFC1964B}.Release|x86.Build.0 = Release|x86
+ {7CF63553-BD9F-4999-B6D8-669405EA230E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7CF63553-BD9F-4999-B6D8-669405EA230E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7CF63553-BD9F-4999-B6D8-669405EA230E}.Debug|x86.ActiveCfg = Debug|x86
+ {7CF63553-BD9F-4999-B6D8-669405EA230E}.Debug|x86.Build.0 = Debug|x86
+ {7CF63553-BD9F-4999-B6D8-669405EA230E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7CF63553-BD9F-4999-B6D8-669405EA230E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7CF63553-BD9F-4999-B6D8-669405EA230E}.Release|x86.ActiveCfg = Release|x86
+ {7CF63553-BD9F-4999-B6D8-669405EA230E}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -63,5 +109,10 @@ Global
GlobalSection(NestedProjects) = preSolution
{890CF504-3814-443B-9EE6-E8BCACF68203} = {AF041458-CF94-4D6D-BB0F-8BC50F4F099C}
{66EB60F2-523D-47C8-95EA-C7E10759E239} = {AF041458-CF94-4D6D-BB0F-8BC50F4F099C}
+ {BC3F2FCE-0AA3-413F-BC36-D6EEFFC1964B} = {AF041458-CF94-4D6D-BB0F-8BC50F4F099C}
+ {7CF63553-BD9F-4999-B6D8-669405EA230E} = {AF041458-CF94-4D6D-BB0F-8BC50F4F099C}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {DCA81122-C823-49AB-982B-AFFA332354DF}
EndGlobalSection
EndGlobal
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 b7c286b40..e25118b4e 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit.csproj
@@ -7,12 +7,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
True
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 54316d346..eda4d6634 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
@@ -7,12 +7,19 @@
+
+
+
+
+
+
+
True
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MainWindow.xaml b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MainWindow.xaml
index 2119926e5..eda6f2bc5 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MainWindow.xaml
+++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MainWindow.xaml
@@ -11,7 +11,7 @@
ToolTip="{x:Static p:Resources.Description}"
ToolTipService.InitialShowDelay="400"
ToolTipService.BetweenShowDelay="100"
- Height="450" Width="800">
+ Height="800" Width="1200">
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Models/IRichTextEditModel.cs b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Models/IRichTextEditModel.cs
index ca33241e3..966c6aa8a 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Models/IRichTextEditModel.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Models/IRichTextEditModel.cs
@@ -13,6 +13,7 @@
// ***********************************************************************
using System;
using System.ComponentModel;
+using System.IO;
///
/// The Models namespace.
@@ -32,10 +33,15 @@ public interface IRichTextEditModel
/// The now.
///
DateTime Now { get; }
+ string EmptyText { get; }
+
///
/// Occurs when [property changed].
///
///
event PropertyChangedEventHandler PropertyChanged;
+
+ string DocumentFromStream(FileStream fs);
+ void DocumentToStream(FileStream fs, string document);
}
}
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Models/PagePrinter.cs b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Models/PagePrinter.cs
new file mode 100644
index 000000000..77a5d69d1
--- /dev/null
+++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Models/PagePrinter.cs
@@ -0,0 +1,66 @@
+using System;
+using System.Linq;
+using System.Printing;
+using System.Windows.Media;
+using System.Windows;
+
+namespace MVVM_25_RichTextEdit.Models;
+
+public static class PagePrinter
+{
+ const int cPPI = 92;
+ const double cMmPerInch = 25.4;
+ const double cDpi = cPPI / cMmPerInch;
+ private const int cA4Width = 210; //[mm]
+ private const int cA4Height = 297; //[mm]
+ private const int cBoarder = 10; //[mm]
+
+ public static void Print(string printerName, string title, object data, Action drawPage)
+ {
+
+ PrintQueue? printQueue = GetPrintQueue(printerName);
+ if (printQueue == null)
+ {
+ return;
+ }
+
+
+ PrintTicket ticket = GetTicket(printQueue);
+
+ Print(printQueue, ticket, title, data, drawPage);
+ }
+
+ public static void Print(PrintQueue? printQueue, PrintTicket ticket, string title, object data, Action drawPage)
+ {
+ printQueue.Comment = $"Comment: {title}";
+ printQueue.CurrentJobSettings.Description = $"Desc: {title}";
+ var writer = PrintQueue.CreateXpsDocumentWriter(printQueue);
+
+ Rect boundingRect =
+ //*/ ticket.PageMediaSize.Width != null && ticket.PageMediaSize.Height != null /*
+ //*/ ? new(cBoarder * cDpi, cBoarder * cDpi, ticket.PageMediaSize.Width.Value - cBoarder * cDpi, ticket.PageMediaSize.Height.Value - cBoarder * cDpi) :
+ new(cBoarder * cDpi, cBoarder * cDpi, (cA4Width - cBoarder) * cDpi, (cA4Height - cBoarder) * cDpi);
+ var visual = new DrawingVisual();
+ using (DrawingContext dc = visual.RenderOpen())
+ {
+ drawPage(title, data, dc, boundingRect);
+ dc.Close();
+
+ }
+ writer.Write(visual, ticket);
+ }
+
+ private static PrintTicket GetTicket(PrintQueue? printQueue)
+ {
+ var ticket = printQueue.UserPrintTicket;
+ ticket.PageMediaSize = new PageMediaSize(PageMediaSizeName.ISOA4);
+ ticket.PageOrientation = PageOrientation.Portrait;
+ ticket.PageResolution = new PageResolution(300, 300);
+ return ticket;
+ }
+
+ private static PrintQueue? GetPrintQueue(string printerName)
+ {
+ return new LocalPrintServer()?.GetPrintQueues().FirstOrDefault(p => p.Name.Contains(printerName));
+ }
+}
\ No newline at end of file
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Models/RichTextEditModel.cs b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Models/RichTextEditModel.cs
index 2f7c27b48..0519ac249 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Models/RichTextEditModel.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Models/RichTextEditModel.cs
@@ -14,6 +14,8 @@
using BaseLib.Interfaces;
using CommunityToolkit.Mvvm.ComponentModel;
using System;
+using System.Globalization;
+using System.IO;
using System.Timers;
///
@@ -30,7 +32,7 @@ namespace MVVM_25_RichTextEdit.Models
///
///
///
- public partial class RichTextEditModel :ObservableObject, IRichTextEditModel
+ public partial class RichTextEditModel : ObservableObject, IRichTextEditModel
{
private const string csApplStart = "Application startet";
#if !NET5_0_OR_GREATER
@@ -44,13 +46,17 @@ public partial class RichTextEditModel :ObservableObject, IRichTextEditModel
private readonly Timer _timer;
private readonly ISysTime _systime;
private readonly ILog _log;
-
+
///
/// Gets the now.
///
/// The now.
///
public DateTime Now { get => _systime.Now; }
+
+ public string EmptyText => @"";
#endregion
#region Methods
@@ -58,7 +64,7 @@ public partial class RichTextEditModel :ObservableObject, IRichTextEditModel
/// Initializes a new instance of the class.
///
///
- public RichTextEditModel(ISysTime sysTime,ILog log)
+ public RichTextEditModel(ISysTime sysTime, ILog log)
{
_systime = sysTime;
_log = log;
@@ -79,6 +85,29 @@ public RichTextEditModel(ISysTime sysTime,ILog log)
return;
}
#endif
+
+ public string DocumentFromStream(FileStream fs)
+ {
+ using var tr = new StreamReader(fs);
+ var t = tr.ReadToEnd();
+ if (t.StartsWith("{t.Replace("\r\n\r\n", "\r\n").Replace("\r\n","")}";
+ }
+ }
+
+ public void DocumentToStream(FileStream fs, string document)
+ {
+ using var tw = new StreamWriter(fs);
+ tw.Write(document);
+ }
#endregion
}
}
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Resources/all64_2.png b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Resources/all64_2.png
new file mode 100644
index 000000000..1e4cabefc
Binary files /dev/null and b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Resources/all64_2.png differ
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/ViewModels/Helper/RichTextboxHelper.cs b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/ViewModels/Helper/RichTextboxHelper.cs
index 69b3406e0..d40afb1ec 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/ViewModels/Helper/RichTextboxHelper.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/ViewModels/Helper/RichTextboxHelper.cs
@@ -33,7 +33,7 @@ public static void SetDocumentXaml(DependencyObject obj, string value)
typeof(string),
typeof(RichTextBoxHelper),
new FrameworkPropertyMetadata(
- "",
+ null,
FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
(obj, e) => {
if (_recursionProtection.Contains(Thread.CurrentThread))
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/ViewModels/RichTextEditViewModel.cs b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/ViewModels/RichTextEditViewModel.cs
index 9b0a8302f..43cbc45e5 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/ViewModels/RichTextEditViewModel.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/ViewModels/RichTextEditViewModel.cs
@@ -11,12 +11,21 @@
//
//
// ***********************************************************************
+using CommonDialogs.Interfaces;
+using CommonDialogs;
using CommunityToolkit.Mvvm.ComponentModel;
+using CommunityToolkit.Mvvm.Input;
+using Microsoft.Win32;
using MVVM.View.Extension;
using MVVM.ViewModel;
using MVVM_25_RichTextEdit.Models;
using System;
using System.ComponentModel;
+using System.IO;
+using System.Reflection;
+using System.Windows.Documents;
+using MVVM.View.ValueConverter;
+using System.Globalization;
namespace MVVM_25_RichTextEdit.ViewModels;
@@ -33,38 +42,32 @@ public partial class RichTextEditViewModel : BaseViewModelCT
public DateTime Now => _model.Now;
[ObservableProperty]
- private string _document = @"
-Model–view–viewmodel
+ private string _document = @"Model–view–viewmodel
-(from Wikipedia)(Redirected from MVVM)
-[...]
-Components of MVVM pattern
-Model Model refers either to a domain model, which represents real state content
-(an object-oriented approach), or to the data access layer, which represents content (a data-centric approach).[citation needed]
-View
- As in the model–view–controller (MVC) and model–view–presenter (MVP) patterns, the view is the structure, layout, and appearance of what
-a user sees on the screen.[7] It displays a representation of the model and receives the user's interaction with the view (mouse clicks, keyboard input, screen tap gestures,
-etc.), and it forwards the handling of these to the view model via the data binding (properties, event callbacks, etc.) that is defined to link the view and view model.
-View model
- The view model is an abstraction of the view exposing public properties and commands. Instead of the controller of the
-MVC pattern, or the presenter of the MVP pattern, MVVM has a binder, which automates communication between the view and its bound properties in the view model. The view model has been
-described as a state of the data in the model.[8]
- The main difference between the view model and the Presenter in the MVP pattern is that the presenter has a reference
-to a view, whereas the view model does not. Instead, a view directly binds to properties on the view model to send and receive updates. To function efficiently, this requires a
-binding technology or generating boilerplate code to do the binding.[7]
- Under object-oriented programming, the view model can sometimes be referred to as a data transfer object.[9]
-Binder
- Declarative data and command-binding are implicit in the MVVM pattern. In the Microsoft solution stack, the binder is a markup language called
-XAML.[10] The binder frees the developer from being obliged to write boiler-plate logic to synchronize the view model and view. When implemented outside of the Microsoft stack, the
-presence of a declarative data binding technology is what makes this pattern possible,[5][11] and without a binder, one would typically use MVP or MVC instead and have to write more
-boilerplate (or generate it with some other tool).";
+(from Wikipedia)(Redirected from MVVM)[...]
+Components of MVVM pattern
+Model Model refers either to a domain model, which represents real state content (an object-oriented approach), or to the data access layer, which represents content (a data-centric approach).[citation needed]
+View As in the model–view–controller (MVC) and model–view–presenter (MVP) patterns, the view is the structure, layout, and appearance of what a user sees on the screen.[7] It displays a representation of the model and receives the user's interaction with the view (mouse clicks, keyboard input, screen tap gestures, etc.), and it forwards the handling of these to the view model via the data binding (properties, event callbacks, etc.) that is defined to link the view and view model.View model The view model is an abstraction of the view exposing public properties and commands. Instead of the controller of the MVC pattern, or the presenter of the MVP pattern, MVVM has a binder, which automates communication between the view and its bound properties in the view model. The view model has been described as a state of the data in the model.[8] The main difference between the view model and the Presenter in the MVP pattern is that the presenter has a reference to a view, whereas the view model does not. Instead, a view directly binds to properties on the view model to send and receive updates. To function efficiently, this requires a binding technology or generating boilerplate code to do the binding.[7] Under object-oriented programming, the view model can sometimes be referred to as a data transfer object.[9]Binder Declarative data and command-binding are implicit in the MVVM pattern. In the Microsoft solution stack, the binder is a markup language called XAML.[10] The binder frees the developer from being obliged to write boiler-plate logic to synchronize the view model and view. When implemented outside of the Microsoft stack, the presence of a declarative data binding technology is what makes this pattern possible,[5][11] and without a binder, one would typically use MVP or MVC instead and have to write more boilerplate (or generate it with some other tool)."
+ ;
+
+ public Func?, bool?> dPrintDialog { get; set; }
+ public Func?, bool?> FileOpenDialog { get; set; }
+ public Func?, bool?> FileSaveAsDialog { get; set; }
+ public string XamlFileName { get; private set; }
+ public Action CloseApp { get; set; }
+
+
+ public string AllImgSource => $"pack://application:,,,/{Assembly.GetExecutingAssembly().GetName().Name};component/Resources/all64_2.png";
#endregion
#region Methods
///
/// Initializes a new instance of the class.
///
- public RichTextEditViewModel():this(IoC.GetRequiredService())
+ public RichTextEditViewModel() : this(IoC.GetRequiredService())
{
}
@@ -76,7 +79,87 @@ public RichTextEditViewModel(IRichTextEditModel model)
private void OnMPropertyChanged(object? sender, PropertyChangedEventArgs e)
{
- OnPropertyChanged(e.PropertyName);
+ OnPropertyChanged(e.PropertyName);
+ }
+
+ [RelayCommand]
+ private void NewText()
+ {
+ Document = _model.EmptyText;
+ }
+
+ [RelayCommand]
+ private void OpenText()
+ {
+ IFileDialog foPar = new FileDialogProxy(new()
+ {
+ FileName = XamlFileName,
+ Filter = "Xaml files (*.Xaml)|*.xaml|Text files (*.txt)|*.txt|All files (*.*)|*.*",
+ DefaultExt = ".xaml"
+ });
+ FileOpenDialog?.Invoke(XamlFileName, foPar,
+ (s, p) =>
+ {
+ XamlFileName = s;
+ using (var fs = new FileStream(s, FileMode.Open))
+ {
+ Document = _model.DocumentFromStream(fs);
+ }
+ });
+
+ }
+
+ [RelayCommand]
+ private void SaveText()
+ {
+ IFileDialog fsPar = new FileDialogProxy(new()
+ {
+ FileName = XamlFileName,
+ Filter = "Xaml files (*.Xaml)|*.xaml|Text files (*.txt)|*.txt|All files (*.*)|*.*",
+ DefaultExt = ".xaml"
+ });
+ FileSaveAsDialog?.Invoke(XamlFileName, fsPar, (s, p) =>
+ {
+ XamlFileName = s;
+ if (File.Exists(Path.ChangeExtension(s, ".new")))
+ {
+ File.Delete(Path.ChangeExtension(s, ".new"));
+ }
+ using (var fs = new FileStream(Path.ChangeExtension(s, ".new"), FileMode.CreateNew))
+ {
+ _model.DocumentToStream(fs, Document);
+ }
+ if (File.Exists(Path.ChangeExtension(s, ".bak")))
+ {
+ File.Delete(Path.ChangeExtension(s, ".bak"));
+ }
+ if (File.Exists(s))
+ {
+ File.Move(s, Path.ChangeExtension(s, ".bak"));
+ }
+ File.Move(Path.ChangeExtension(s, ".new"), s);
+ });
+ }
+
+ [RelayCommand]
+ private void PrintText()
+ {
+ // Show PrintDialog
+ IPrintDialog dialog = new PrintDialog()
+ {
+ PageRangeSelection = System.Windows.Controls.PageRangeSelection.AllPages
+ };
+ dPrintDialog?.Invoke(dialog, (p, dp) =>
+ {
+ p.PrintDocument(dp, "printing as paginator");
+ });
+ }
+
+ [RelayCommand]
+ private void Exit()
+ {
+ // Handle unsaved Changes
+ CloseApp?.Invoke();
}
#endregion
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Views/RichTextEditView.xaml b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Views/RichTextEditView.xaml
index 72d63c3cd..0448e46a9 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Views/RichTextEditView.xaml
+++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Views/RichTextEditView.xaml
@@ -12,11 +12,36 @@
xmlns:vmhlp="clr-namespace:MVVM_25_RichTextEdit.ViewModels.Helper"
xmlns:model="clr-namespace:MVVM_25_RichTextEdit.Models"
mc:Ignorable="d"
- d:DesignHeight="450" d:DesignWidth="800"
+ d:DesignHeight="768" d:DesignWidth="1024"
Title="{x:Static p:Resources.Title}">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -35,33 +60,83 @@
-
-
-
-
-
-
-
- B
-
-
- I
-
-
- U
-
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B
+
+
+ I
+
+
+ U
+
+
+
+
+
+
+
+
+
+
+
+
CustomWords.lex
@@ -70,8 +145,8 @@
-
-
+
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Views/RichTextEditView.xaml.cs b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Views/RichTextEditView.xaml.cs
index c885cbf94..a501b5e35 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Views/RichTextEditView.xaml.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/Views/RichTextEditView.xaml.cs
@@ -1,6 +1,9 @@
-using System.Windows.Controls;
+using System;
+using System.Windows;
+using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Markup;
+using CommonDialogs.Interfaces;
using MVVM_25_RichTextEdit.ViewModels;
namespace MVVM_25_RichTextEdit.Views
@@ -13,14 +16,55 @@ public partial class RichTextEditView : Page
public RichTextEditView()
{
InitializeComponent();
+ Loaded += Page_Loaded;
}
- private void rtf_TextChanged(object sender, TextChangedEventArgs e)
+ ///
+ /// Handles the Loaded event of the Page control.
+ ///
+ /// The source of the event.
+ /// The instance containing the event data.
+ public void Page_Loaded(object sender, RoutedEventArgs e)
{
- if (sender is RichTextBox richTextBox2 && DataContext is RichTextEditViewModel vm)
- {
- vm.Document = XamlWriter.Save(richTextBox2.Document);
- }
+ var vm = (RichTextEditViewModel)DataContext;
+ vm.FileOpenDialog = DoFileDialog;
+ vm.FileSaveAsDialog = DoFileDialog;
+ vm.dPrintDialog = DoPrintDialog;
+ vm.CloseApp = DoClose;
}
+
+ ///
+ /// Does the file dialog.
+ ///
+ /// The filename.
+ /// The par.
+ /// The on accept.
+ /// true if XXXX, false otherwise.
+ private bool? DoFileDialog(string Filename, IFileDialog Par, Action? OnAccept)
+ {
+ Par.FileName = Filename;
+ bool? result = Par.ShowDialog(this.Parent as Window);
+ if (result ?? false) OnAccept?.Invoke(Par.FileName, Par);
+ return result;
+ }
+
+ ///
+ /// Does the print dialog.
+ ///
+ /// The par.
+ /// The on print.
+ /// true if XXXX, false otherwise.
+ private bool? DoPrintDialog(IPrintDialog par, Action? OnPrint)
+ {
+ bool? result = par.ShowDialog();
+ if (result ?? false) OnPrint?.Invoke(par, ((IDocumentPaginatorSource)rtf.Document).DocumentPaginator);
+ return result;
+ }
+
+ private void DoClose()
+ {
+ Application.Current.Shutdown();
+ }
+
}
}
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/ValueConverters/DateTimeValueConverterTests.cs b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/ValueConverters/DateTimeValueConverterTests.cs
index e6ca6f3f2..6d0267fe7 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/ValueConverters/DateTimeValueConverterTests.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/ValueConverters/DateTimeValueConverterTests.cs
@@ -19,7 +19,7 @@
/// The Tests namespace.
///
///
-namespace MVVM_25_RichTextEdit.ValueConverter.Tests
+namespace MVVM_25_RichTextEdit.ValueConverters.Tests
{
///
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/Models/DepartmrntTests.cs b/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/Models/DepartmrntTests.cs
index e2ae48f1d..315658a25 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/Models/DepartmrntTests.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/Models/DepartmrntTests.cs
@@ -57,7 +57,7 @@ static IEnumerable DepartmentPropertyTestData
public void TestProperties(string sProp, string sName, object oVal, object oExp)
{
if (oVal is DateTime?)
- testItem.SetProp(sProp, oVal as DateTime?);
+ testItem.SetProp(sProp, oVal as DateTime?);
else
testItem.SetProp(sProp, oVal);
Assert.AreEqual(oExp, testItem.GetProp(sProp));
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/Models/PersonTests.cs b/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/Models/PersonTests.cs
index b7ffc3f2d..292b45c49 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/Models/PersonTests.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/Models/PersonTests.cs
@@ -51,7 +51,7 @@ static IEnumerable PersonPropertyTestData { get
public void TestProperties(string sProp,string sName,object oVal,object oExp)
{
if (oVal is DateTime? )
- testItem.SetProp(sProp, oVal as DateTime?);
+ testItem.SetProp(sProp, oVal as DateTime?);
else
testItem.SetProp(sProp, oVal);
Assert.AreEqual(oExp,testItem.GetProp(sProp));
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/App.xaml.cs b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/App.xaml.cs
index e9c3fef07..0477ddb4d 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/App.xaml.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/App.xaml.cs
@@ -11,11 +11,12 @@
//
//
// ***********************************************************************
-using BaseLib.Helper.MVVM;
+using System.Windows;
using Microsoft.Extensions.DependencyInjection;
-using MVVM_28_1_CTDataGridExt.Services;
+using BaseLib.Interfaces;
+using BaseLib.Helper.MVVM;
using MVVM.View.Extension;
-using System.Windows;
+using MVVM_28_1_CTDataGridExt.Services;
namespace MVVM_28_1_CTDataGridExt
{
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/Services/PersonService.cs b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/Services/PersonService.cs
index 303880901..65ea5bec4 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/Services/PersonService.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/Services/PersonService.cs
@@ -1,4 +1,5 @@
using BaseLib.Helper.MVVM;
+using BaseLib.Interfaces;
using MVVM.View.Extension;
using MVVM_28_1_CTDataGridExt.Models;
using System;
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/Services/PersonServiceTests.cs b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/Services/PersonServiceTests.cs
index 4f4212f49..aeb40a088 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/Services/PersonServiceTests.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/Services/PersonServiceTests.cs
@@ -1,4 +1,5 @@
using BaseLib.Helper.MVVM;
+using BaseLib.Interfaces;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MVVM.View.Extension;
using MVVM_28_1_CTDataGridExt.Models;
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/Services/PersonService.cs b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/Services/PersonService.cs
index e3b01d165..c2b37a3ca 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/Services/PersonService.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/Services/PersonService.cs
@@ -1,8 +1,9 @@
-using BaseLib.Helper.MVVM;
+using System;
+using System.Collections.Generic;
+using BaseLib.Helper.MVVM;
+using BaseLib.Interfaces;
using MVVM.View.Extension;
using MVVM_28_1_DataGridExt.Models;
-using System;
-using System.Collections.Generic;
namespace MVVM_28_1_DataGridExt.Services
{
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/Models/DepartmrntTests.cs b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/Models/DepartmrntTests.cs
index 2a378eb9e..57574ced2 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/Models/DepartmrntTests.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/Models/DepartmrntTests.cs
@@ -60,7 +60,7 @@ static IEnumerable DepartmentPropertyTestData
public void TestProperties(string sProp, string sName, object oVal, object oExp)
{
if (oVal is DateTime?)
- testItem.SetProp(sProp, oVal as DateTime?);
+ testItem.SetProp(sProp, oVal as DateTime?);
else
testItem.SetProp(sProp, oVal);
Assert.AreEqual(oExp, testItem.GetProp(sProp));
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/Models/PersonTests.cs b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/Models/PersonTests.cs
index d76f80456..5af0eac14 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/Models/PersonTests.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/Models/PersonTests.cs
@@ -51,7 +51,7 @@ static IEnumerable PersonPropertyTestData { get
public void TestProperties(string sProp,string sName,object oVal,object oExp)
{
if (oVal is DateTime? )
- testItem.SetProp(sProp, oVal as DateTime?);
+ testItem.SetProp(sProp, oVal as DateTime?);
else
testItem.SetProp(sProp, oVal);
Assert.AreEqual(oExp,testItem.GetProp(sProp));
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/Services/PersonServiceTests.cs b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/Services/PersonServiceTests.cs
index b72953429..34c318240 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/Services/PersonServiceTests.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/Services/PersonServiceTests.cs
@@ -1,9 +1,10 @@
-using BaseLib.Helper.MVVM;
+using System.Collections.Generic;
+using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
+using BaseLib.Interfaces;
+using BaseLib.Helper.MVVM;
using MVVM.View.Extension;
using MVVM_28_1_DataGridExt.Models;
-using System.Collections.Generic;
-using System.Linq;
namespace MVVM_28_1_DataGridExt.Services.Tests
{
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/Models/DepartmrntTests.cs b/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/Models/DepartmrntTests.cs
index 482dd2654..8f8732927 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/Models/DepartmrntTests.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/Models/DepartmrntTests.cs
@@ -60,7 +60,7 @@ static IEnumerable DepartmentPropertyTestData
public void TestProperties(string sProp, string _, object oVal, object oExp)
{
if (oVal is DateTime?)
- testItem.SetProp(sProp, oVal as DateTime?);
+ testItem.SetProp(sProp, oVal as DateTime?);
else
testItem.SetProp(sProp, oVal);
Assert.AreEqual(oExp, testItem.GetProp(sProp));
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/Models/PersonTests.cs b/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/Models/PersonTests.cs
index 697342234..638bbff28 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/Models/PersonTests.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/Models/PersonTests.cs
@@ -51,7 +51,7 @@ static IEnumerable PersonPropertyTestData { get
public void TestProperties(string sProp,string _,object oVal,object oExp)
{
if (oVal is DateTime? )
- testItem.SetProp(sProp, oVal as DateTime?);
+ testItem.SetProp(sProp, oVal as DateTime?);
else
testItem.SetProp(sProp, oVal);
Assert.AreEqual(oExp,testItem.GetProp(sProp));
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Models/CommunityToolkit2Model.cs b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Models/CommunityToolkit2Model.cs
index e06c78362..43749ad92 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Models/CommunityToolkit2Model.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/Models/CommunityToolkit2Model.cs
@@ -24,10 +24,10 @@ namespace MVVM_36_ComToolKtSavesWork.Models
///
/// Class TemplateModel.
/// Implements the
- /// Implements the
+ /// Implements the
///
///
- ///
+ ///
///
public partial class CommunityToolkit2Model :ObservableObject, ICommunityToolkit2Model
{
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/App.xaml.cs b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/App.xaml.cs
index d37f00fc0..8c274b66f 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/App.xaml.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/App.xaml.cs
@@ -17,6 +17,7 @@
using BaseLib.Helper;
using System.Windows;
using MVVM.View.Extension;
+using CommunityToolkit.Mvvm.Messaging;
namespace MVVM_40_Wizzard;
@@ -30,6 +31,7 @@ protected override void OnStartup(StartupEventArgs e)
IServiceCollection services = new ServiceCollection()
.AddSingleton()
+ .AddSingleton()
.AddTransient()
.AddSingleton();
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 846dd3d97..c54a386bd 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard.csproj
@@ -8,16 +8,12 @@
-
-
-
-
+
PreserveNewest
-
-
+
@@ -27,9 +23,9 @@
- True
- True
- Resources.resx
+ True
+ True
+ Resources.resx
True
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 44bb355ad..4b884a5d0 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
@@ -7,6 +7,14 @@
+
+
+ PreserveNewest
+
+
+
+
+
@@ -15,9 +23,9 @@
- True
- True
- Resources.resx
+ True
+ True
+ Resources.resx
True
@@ -30,6 +38,9 @@
PublicResXFileCodeGenerator
Resources.Designer.cs
+
+ MSBuild:Compile
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Properties/Resources.de.resx b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Properties/Resources.de.resx
new file mode 100644
index 000000000..dff360012
--- /dev/null
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Properties/Resources.de.resx
@@ -0,0 +1,226 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 10. Zusatz
+
+
+ 12. Zusatz
+
+
+ 13. Zusatz
+
+
+ 15. Zusatz
+
+
+ 16. Zusatz
+
+
+ 17. Zusatz
+
+
+ 19. Zusatz
+
+
+ 21. Zusatz
+
+
+ MVVM-Experte
+
+
+ 1. Eintrag
+
+
+ 2. Eintrag
+
+
+ 10. Eintrag
+
+
+ 3. Eintrag
+
+
+ 4. Eintrag
+
+
+ 6. Eintrag
+
+
+ 8. Eintrag
+
+
+ 9. Eintrag
+
+
+ weiter >
+
+
+ 1. Hauptauswahl
+
+
+ 2. Unterauswahl
+
+
+ 3. Zusätzliches
+
+
+ 4. Optionen
+
+
+ < zurück
+
+
+ 1. Untereintrag
+
+
+ 11. Untereintrag
+
+
+ 2. Untereintrag
+
+
+ 3. Untereintrag
+
+
+ 5. Untereintrag
+
+
+ 6. Untereintrag
+
+
+ 7. Untereintrag
+
+
+ 9. Untereintrag
+
+
+ Wizzard-Ansicht
+
+
+
+ ..\Models\WizzardModel.cs;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
+
+
+ ..\Views\WizzardView.xaml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
+
+
+ ..\ViewModels\WizzardViewModel.cs;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
+
+
\ No newline at end of file
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Properties/Resources.en.resx b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Properties/Resources.en.resx
new file mode 100644
index 000000000..a504507da
--- /dev/null
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Properties/Resources.en.resx
@@ -0,0 +1,226 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 10. Additional
+
+
+ 12. Additional
+
+
+ 13. Additional
+
+
+ 15. Additional
+
+
+ 16. Additional
+
+
+ 17. Additional
+
+
+ 19. Additional
+
+
+ 21. Additional
+
+
+ MVVM-Wizzard
+
+
+ 1. Entry
+
+
+ 2. Entry
+
+
+ 10. Entry
+
+
+ 3. Entry
+
+
+ 4. Entry
+
+
+ 6. Entry
+
+
+ 8. Entry
+
+
+ 9. Entry
+
+
+ next >
+
+
+ 1. Make selection
+
+
+ 2. Fine selection
+
+
+ 3. Additionals
+
+
+ 4. Options
+
+
+ < previous
+
+
+ 1. Subentry
+
+
+ 11. Subentry
+
+
+ 2. Subentry
+
+
+ 3. Subentry
+
+
+ 5. Subentry
+
+
+ 6. Subentry
+
+
+ 7. Subentry
+
+
+ 9. Subentry
+
+
+ Wizzard-View
+
+
+
+ ..\Models\WizzardModel.cs;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
+
+
+ ..\Views\WizzardView.xaml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
+
+
+ ..\ViewModels\WizzardViewModel.cs;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
+
+
\ No newline at end of file
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Properties/Resources.fr.resx b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Properties/Resources.fr.resx
new file mode 100644
index 000000000..a504507da
--- /dev/null
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Properties/Resources.fr.resx
@@ -0,0 +1,226 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 10. Additional
+
+
+ 12. Additional
+
+
+ 13. Additional
+
+
+ 15. Additional
+
+
+ 16. Additional
+
+
+ 17. Additional
+
+
+ 19. Additional
+
+
+ 21. Additional
+
+
+ MVVM-Wizzard
+
+
+ 1. Entry
+
+
+ 2. Entry
+
+
+ 10. Entry
+
+
+ 3. Entry
+
+
+ 4. Entry
+
+
+ 6. Entry
+
+
+ 8. Entry
+
+
+ 9. Entry
+
+
+ next >
+
+
+ 1. Make selection
+
+
+ 2. Fine selection
+
+
+ 3. Additionals
+
+
+ 4. Options
+
+
+ < previous
+
+
+ 1. Subentry
+
+
+ 11. Subentry
+
+
+ 2. Subentry
+
+
+ 3. Subentry
+
+
+ 5. Subentry
+
+
+ 6. Subentry
+
+
+ 7. Subentry
+
+
+ 9. Subentry
+
+
+ Wizzard-View
+
+
+
+ ..\Models\WizzardModel.cs;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
+
+
+ ..\Views\WizzardView.xaml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
+
+
+ ..\ViewModels\WizzardViewModel.cs;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
+
+
\ No newline at end of file
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resource/MainSelection0.xaml b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resource/MainSelection0.xaml
deleted file mode 100644
index b59bb300a..000000000
--- a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resource/MainSelection0.xaml
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
- Canvas Overview
-
-
-
-
-
- [This topic is pre-release documentation and is subject to change in future releases. Blank topics are included as placeholders.]
-
-
- The Canvas element is used to position content according to absolute x- and y-coordinates. Canvas provides ultimate flexibility for positioning and arranging elements on the screen. Elements can be drawn in a unique location, or in the event that elements occupy the same coordinates, the order in which they appear in markup determines the order in which elements are drawn.
-
- This topic contains the following sections.
-
-
-
-
- What Can I Do with the Canvas?
-
-
- Adding a Border to a Canvas Element
-
-
- Order of Elements in a Canvas
-
-
- Creating a Canvas in "XAML"
-
-
- Creating a Canvas in Code
-
-
-
-
- What Can I Do with the Canvas?
- Canvas provides the most flexible layout support of any Panel element. Height and Width properties are used to define the area of the canvas, and elements inside are assigned absolute coordinates relative to the upper left corner of the parent Canvas. This allows you to position and arrange elements precisely where you want them on the screen.
-
- Adding a Border to a Canvas Element
- In order for a Canvas element to have a border, it must be encapsulated within a Border element.
-
\ No newline at end of file
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resource/MainSelection1.xaml b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resource/MainSelection1.xaml
deleted file mode 100644
index b41f1330a..000000000
--- a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resource/MainSelection1.xaml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection.xaml b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection.xaml
new file mode 100644
index 000000000..ed5b55cac
--- /dev/null
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection.xaml
@@ -0,0 +1 @@
+“MainSelection” Please make a selection ...
\ No newline at end of file
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resource/MainSelection0.png b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection0.png
similarity index 100%
rename from CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resource/MainSelection0.png
rename to CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection0.png
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection0.xaml b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection0.xaml
new file mode 100644
index 000000000..f80bcb7bb
--- /dev/null
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection0.xaml
@@ -0,0 +1 @@
+“MainSelection2” is a versatile and captivating choice. It stands at the forefront, ready to capture attention. While it may not be the most glamorous option, it exudes understated elegance, making it a reliable and solid decision.This choice can symbolize the beginning of something new. It opens possibilities and unlocks doors. In a world full of decisions and options, it serves as the starting point from which we embark on our journey.Its simple beauty is timeless. Unburdened by excessive details or unnecessary frills, it radiates quiet strength. Sometimes, it’s the unassuming, seemingly insignificant choices that leave the greatest impact.“MainSelection2” can also serve as a metaphor for life itself. We make choices every day, both big and small. Sometimes, it’s the inconspicuous options that have the most profound influence on our destiny.In a world of technology and progress, “MainSelection2” remains a relic of the past. It reminds us that it’s not always about the newest and most exciting. Sometimes, the tried-and-true is precisely what we need.Overall, “MainSelection2” is a versatile and meaningful choice. It may appear unremarkable at first glance, but upon closer inspection, it reveals its true significance. May it accompany us on our journey, reminding us that often, it’s the little things that make all the difference. 🌟
\ No newline at end of file
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resource/MainSelection1.png b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection1.png
similarity index 100%
rename from CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resource/MainSelection1.png
rename to CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection1.png
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection1.xaml b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection1.xaml
new file mode 100644
index 000000000..95b9c92aa
--- /dev/null
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection1.xaml
@@ -0,0 +1 @@
+“MainSelection2” is a versatile and captivating choice. It stands at the forefront, ready to capture attention. While it may not be the most glamorous option, it exudes understated elegance, making it a reliable and solid decision.This choice can symbolize the beginning of something new. It opens possibilities and unlocks doors. In a world full of decisions and options, it serves as the starting point from which we embark on our journey.“MainSelection2” can also serve as a metaphor for life itself. We make choices every day, both big and small. Sometimes, it’s the inconspicuous options that have the most profound influence on our destiny.Its simple beauty is timeless. Unburdened by excessive details or unnecessary frills, it radiates quiet strength. Sometimes, it’s the unassuming, seemingly insignificant choices that leave the greatest impact.In a world of technology and progress, “MainSelection2” remains a relic of the past. It reminds us that it’s not always about the newest and most exciting. Sometimes, the tried-and-true is precisely what we need.In general“MainSelection2” is a versatile and meaningful choice. It may appear unremarkable at first glance, but upon closer inspection, it reveals its true significance. May it accompany us on our journey, reminding us that often, it’s the little things that make all the difference. 🌟
\ No newline at end of file
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resource/MainSelection3.png b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection3.png
similarity index 100%
rename from CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resource/MainSelection3.png
rename to CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection3.png
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection3.xaml b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection3.xaml
new file mode 100644
index 000000000..e365ebc5e
--- /dev/null
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection3.xaml
@@ -0,0 +1 @@
+“MainSelection3” is a versatile and captivating choice. It stands at the forefront, ready to capture attention. While it may not be the most glamorous option, it exudes understated elegance, making it a reliable and solid decision.“MainSelection3” can also serve as a metaphor for life itself. We make choices every day, both big and small. Sometimes, it’s the inconspicuous options that have the most profound influence on our destiny.This choice can symbolize the beginning of something new. It opens possibilities and unlocks doors. In a world full of decisions and options, it serves as the starting point from which we embark on our journey.In a world of technology and progress, “MainSelection3” remains a relic of the past. It reminds us that it’s not always about the newest and most exciting. Sometimes, the tried-and-true is precisely what we need.Its simple beauty is timeless. Unburdened by excessive details or unnecessary frills, it radiates quiet strength. Sometimes, it’s the unassuming, seemingly insignificant choices that leave the greatest impact.In general“MainSelection3” is a versatile and meaningful choice. It may appear unremarkable at first glance, but upon closer inspection, it reveals its true significance. May it accompany us on our journey, reminding us that often, it’s the little things that make all the difference. 🌟
\ No newline at end of file
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resource/MainSelection4.png b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection4.png
similarity index 100%
rename from CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resource/MainSelection4.png
rename to CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection4.png
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection4.xaml b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection4.xaml
new file mode 100644
index 000000000..a26939f85
--- /dev/null
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection4.xaml
@@ -0,0 +1 @@
+“MainSelection4” is a versatile and captivating choice. It stands at the forefront, ready to capture attention. While it may not be the most glamorous option, it exudes understated elegance, making it a reliable and solid decision.“MainSelection4” can also serve as a metaphor for life itself. We make choices every day, both big and small. Sometimes, it’s the inconspicuous options that have the most profound influence on our destiny.This choice can symbolize the beginning of something new. It opens possibilities and unlocks doors. In a world full of decisions and options, it serves as the starting point from which we embark on our journey.In a world of technology and progress, “MainSelection4” remains a relic of the past. It reminds us that it’s not always about the newest and most exciting. Sometimes, the tried-and-true is precisely what we need.Its simple beauty is timeless. Unburdened by excessive details or unnecessary frills, it radiates quiet strength. Sometimes, it’s the unassuming, seemingly insignificant choices that leave the greatest impact.Finally“MainSelection4” is a versatile and extremly meaningful choice. It may appear unremarkable at first glance, but upon closer inspection, it reveals its true significance. May it accompany us on our journey, reminding us that often, it’s the little things that make all the difference. 🌟
\ No newline at end of file
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resource/MainSelection5.png b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection6.png
similarity index 100%
rename from CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resource/MainSelection5.png
rename to CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection6.png
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection6.xaml b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection6.xaml
new file mode 100644
index 000000000..905f2bb64
--- /dev/null
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/MainSelection6.xaml
@@ -0,0 +1 @@
+“MainSelection6” is a versatile and captivating choice. It stands at the forefront, ready to capture attention. While it may not be the most glamorous option, it exudes understated elegance, making it a reliable and solid decision.“MainSelection6” can also serve as a metaphor for life itself. We make choices every day, both big and small. Sometimes, it’s the inconspicuous options that have the most profound influence on our destiny.This choice can symbolize the beginning of something new. It opens possibilities and unlocks doors. In a world full of decisions and options, it serves as the starting point from which we embark on our journey.In a world of technology and progress, “MainSelection6” remains a relic of the past. It reminds us that it’s not always about the newest and most exciting. Sometimes, the tried-and-true is precisely what we need.Its simple beauty is timeless. Unburdened by excessive details or unnecessary frills, it radiates quiet strength. Sometimes, it’s the unassuming, seemingly insignificant choices that leave the greatest impact.Finally“MainSelection6” is a versatile and extremly meaningful choice. It may appear unremarkable at first glance, but upon closer inspection, it reveals its true significance. May it accompany us on our journey, reminding us that often, it’s the little things that make all the difference. 🌟
\ No newline at end of file
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/de/MainSelection0.xaml b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/de/MainSelection0.xaml
new file mode 100644
index 000000000..397334296
--- /dev/null
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/de/MainSelection0.xaml
@@ -0,0 +1 @@
+“MainSelection1” ist eine vielseitige und faszinierende Option. Sie steht an vorderster Stelle, bereit, die Aufmerksamkeit auf sich zu ziehen. Obwohl sie vielleicht nicht die glamouröseste Wahl ist, hat sie eine unaufdringliche Eleganz, die sie zu einer verlässlichen und soliden Entscheidung macht.Die “MainSelection1” kann als Symbol für den Beginn von etwas Neuem gesehen werden. Sie eröffnet Möglichkeiten und öffnet Türen. In einer Welt voller Entscheidungen und Optionen ist sie der Anfangspunkt, von dem aus wir unsere Reise starten können.Ihre schlichte Schönheit ist zeitlos. Sie ist nicht überladen mit Details oder unnötigen Schnörkeln. Stattdessen konzentriert sie sich auf das Wesentliche und strahlt eine ruhige Kraft aus. Manchmal sind es gerade die einfachen Dinge, die am meisten beeindrucken.Die “MainSelection1” kann auch als Metapher für das Leben selbst dienen. Wir alle treffen täglich Entscheidungen, große und kleine. Manchmal sind es die unscheinbaren, scheinbar unbedeutenden Optionen, die den größten Einfluss auf unser Schicksal haben.In der Welt der Technologie und des Fortschritts ist die “MainSelection1” ein Relikt vergangener Zeiten. Sie erinnert uns daran, dass es nicht immer um das Neueste und Aufregendste geht. Manchmal ist das Altbewährte genau das Richtige.Insgesamt ist die “MainSelection1” eine vielseitige und bedeutsame Wahl. Sie mag auf den ersten Blick unscheinbar wirken, aber bei genauerem Hinsehen entfaltet sie ihre wahre Größe und Bedeutung. Möge sie uns auf unserem Weg begleiten und uns daran erinnern, dass es oft die kleinen Dinge sind, die den Unterschied machen. 🌟
\ No newline at end of file
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/en/MainSelection0.xaml b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/en/MainSelection0.xaml
new file mode 100644
index 000000000..b4d748172
--- /dev/null
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/en/MainSelection0.xaml
@@ -0,0 +1 @@
+“MainSelection1” is a versatile and captivating choice. It stands at the forefront, ready to capture attention. While it may not be the most glamorous option, it exudes understated elegance, making it a reliable and solid decision.This choice can symbolize the beginning of something new. It opens possibilities and unlocks doors. In a world full of decisions and options, it serves as the starting point from which we embark on our journey.Its simple beauty is timeless. Unburdened by excessive details or unnecessary frills, it radiates quiet strength. Sometimes, it’s the unassuming, seemingly insignificant choices that leave the greatest impact.“MainSelection1” can also serve as a metaphor for life itself. We make choices every day, both big and small. Sometimes, it’s the inconspicuous options that have the most profound influence on our destiny.In a world of technology and progress, “MainSelection1” remains a relic of the past. It reminds us that it’s not always about the newest and most exciting. Sometimes, the tried-and-true is precisely what we need.Overall, “MainSelection1” is a versatile and meaningful choice. It may appear unremarkable at first glance, but upon closer inspection, it reveals its true significance. May it accompany us on our journey, reminding us that often, it’s the little things that make all the difference. 🌟
\ No newline at end of file
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/fr/MainSelection0.xaml b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/fr/MainSelection0.xaml
new file mode 100644
index 000000000..77d70bca6
--- /dev/null
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Resources/fr/MainSelection0.xaml
@@ -0,0 +1 @@
+"MainSelection1"est un choix polyvalent et captivant. Il se tient au premier plan, prêt à attirer l'attention. Bien qu'il ne soit peut-être pas l'option la plus glamour, il dégage une élégance discrète, en faisant un choix fiable et solide.Sa beauté simple est intemporelle. Il n'est pas encombré de détails excessifs ou de fioritures inutiles. Au lieu de cela, il se concentre sur l'essentiel et rayonne d'une force tranquille. Parfois, ce sont précisément les choses simples qui impressionnent le plus."MainSelection1" peut également servir de métaphore pour la vie elle-même. Nous prenons des décisions chaque jour, grandes et petites. Parfois, ce sont les options discrètes et apparemment insignifiantes qui ont le plus grand impact sur notre destin.Dans un monde de technologie et de progrès, "MainSelection1" reste un vestige du passé. Il nous rappelle qu'il ne s'agit pas toujours du plus récent et du plus excitant. Parfois, le testé et approuvé est précisément ce dont nous avons besoin.En fin de compte, "MainSelection1" est un choix polyvalent et significatif. Il peut sembler banal au premier coup d'œil, mais à y regarder de plus près, il révèle sa véritable importance. Puissiez-vous l'accompagner dans votre voyage, en nous rappelant que ce sont souvent les petites choses qui font toute la différence. 🌟
\ No newline at end of file
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ViewModels/Page1ViewModel.cs b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ViewModels/Page1ViewModel.cs
index 72b96acc2..3297f6f2d 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ViewModels/Page1ViewModel.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ViewModels/Page1ViewModel.cs
@@ -23,6 +23,10 @@
using System.IO;
using System.Windows.Media;
using System.Globalization;
+using System.Windows.Media.Imaging;
+using System;
+using CommunityToolkit.Mvvm.Messaging;
+using CommunityToolkit.Mvvm.Messaging.Messages;
///
@@ -35,7 +39,7 @@ namespace MVVM_40_Wizzard.ViewModels;
/// Implements the
///
///
-public partial class Page1ViewModel : BaseViewModelCT
+public partial class Page1ViewModel : BaseViewModelCT , IRecipient>
{
///
/// The model
@@ -59,21 +63,46 @@ public ListEntry? MainSelection
public IList MainOptions
=> _model.MainOptions.Select((i)=>new ListEntry(i, Properties.Resources.ResourceManager.GetString($"MainSelection{i}"))).ToList();
- public string? ImageSource
+ public ImageSource? ImageSource
{
get
{
- if (File.Exists($"Resource\\{CultureInfo.CurrentUICulture.Name}\\MainSelection{MainSelection?.ID}.png"))
+ if (File.Exists($"Resources\\{CultureInfo.CurrentUICulture.Name}\\MainSelection{MainSelection?.ID}.png"))
{
- return $"/Resource/{CultureInfo.CurrentUICulture.Name}/MainSelection{MainSelection?.ID}.png";
+ return new BitmapImage(new System.Uri( $".\\Resources\\{CultureInfo.CurrentUICulture.Name}\\MainSelection{MainSelection?.ID}.png"));
}
- else if (File.Exists($"Resource\\{CultureInfo.CurrentUICulture.TwoLetterISOLanguageName}\\MainSelection{MainSelection?.ID}.png"))
+ else if (File.Exists($"Resources\\{CultureInfo.CurrentUICulture.TwoLetterISOLanguageName}\\MainSelection{MainSelection?.ID}.png"))
{
- return $"/Resource/{CultureInfo.CurrentUICulture.TwoLetterISOLanguageName}/MainSelection{MainSelection?.ID}.png";
+ return new BitmapImage(new System.Uri($".\\Resources\\{CultureInfo.CurrentUICulture.TwoLetterISOLanguageName}\\MainSelection{MainSelection?.ID}.png"));
}
- else if (File.Exists($"Resource\\MainSelection{MainSelection?.ID}.png"))
+ else if (File.Exists($"Resources\\MainSelection{MainSelection?.ID}.png"))
{
- return $"/Resource/MainSelection{MainSelection?.ID}.png";
+ return new BitmapImage(new Uri(
+ Path.Combine(Environment.CurrentDirectory, "Resources", $"MainSelection{MainSelection?.ID}.png")
+ ));
+ }
+ else
+ {
+ return null;
+ }
+ }
+ }
+
+ public string? Document
+ {
+ get
+ {
+ if (File.Exists($"Resources\\{CultureInfo.CurrentUICulture.Name}\\MainSelection{MainSelection?.ID}.xaml"))
+ {
+ return File.ReadAllText($"Resources\\{CultureInfo.CurrentUICulture.Name}\\MainSelection{MainSelection?.ID}.xaml");
+ }
+ else if (File.Exists($"Resources\\{CultureInfo.CurrentUICulture.TwoLetterISOLanguageName}\\MainSelection{MainSelection?.ID}.xaml"))
+ {
+ return File.ReadAllText($"Resources\\{CultureInfo.CurrentUICulture.TwoLetterISOLanguageName}\\MainSelection{MainSelection?.ID}.xaml");
+ }
+ else if (File.Exists($"Resources\\MainSelection{MainSelection?.ID}.xaml"))
+ {
+ return File.ReadAllText($"Resources\\MainSelection{MainSelection?.ID}.xaml");
}
else
{
@@ -85,7 +114,7 @@ public string? ImageSource
///
/// Initializes a new instance of the class.
///
- public Page1ViewModel():this(IoC.GetRequiredService())
+ public Page1ViewModel():this(IoC.GetRequiredService(), IoC.GetRequiredService())
{
}
@@ -93,10 +122,11 @@ public Page1ViewModel():this(IoC.GetRequiredService())
/// Initializes a new instance of the class.
///
/// The model.
- public Page1ViewModel(IWizzardModel model)
+ public Page1ViewModel(IWizzardModel model,IMessenger messenger)
{
_model = model;
- _model.PropertyChanged += OnMPropertyChanged;
+ _model.PropertyChanged += OnMPropertyChanged;
+ messenger.Register>(this);
}
///
@@ -120,6 +150,17 @@ private void OnMPropertyChanged(object? sender, PropertyChangedEventArgs e)
if (e.PropertyName == nameof(MainSelection))
{
OnPropertyChanged(nameof(ImageSource));
+ OnPropertyChanged(nameof(Document));
}
}
+
+ public void Receive(ValueChangedMessage message)
+ {
+ OnPropertyChanged(nameof(ImageSource));
+ OnPropertyChanged(nameof(Document));
+ var i = _model.MainSelection;
+ OnPropertyChanged(nameof(MainOptions));
+ _model.MainSelection = i;
+ OnPropertyChanged(nameof(MainSelection));
+ }
}
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ViewModels/Page4ViewModel.cs b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ViewModels/Page4ViewModel.cs
index d96cb06e0..42bec1d0c 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ViewModels/Page4ViewModel.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ViewModels/Page4ViewModel.cs
@@ -20,6 +20,9 @@
using CommunityToolkit.Mvvm.Input;
using System.Linq;
using MVVM_40_Wizzard.Properties;
+using CommunityToolkit.Mvvm.Messaging.Messages;
+using CommunityToolkit.Mvvm.Messaging;
+using System.Globalization;
///
@@ -32,7 +35,7 @@ namespace MVVM_40_Wizzard.ViewModels;
/// Implements the
///
///
-public partial class Page4ViewModel : BaseViewModelCT
+public partial class Page4ViewModel : BaseViewModelCT, IRecipient>
{
///
/// The model
@@ -72,7 +75,7 @@ public partial class Page4ViewModel : BaseViewModelCT
///
/// Initializes a new instance of the class.
///
- public Page4ViewModel():this(IoC.GetRequiredService())
+ public Page4ViewModel():this(IoC.GetRequiredService(), IoC.GetRequiredService())
{
}
@@ -80,10 +83,11 @@ public Page4ViewModel():this(IoC.GetRequiredService())
/// Initializes a new instance of the class.
///
/// The model.
- public Page4ViewModel(IWizzardModel model)
+ public Page4ViewModel(IWizzardModel model, IMessenger messenger)
{
_model = model;
_model.PropertyChanged += OnMPropertyChanged;
+ messenger.Register>(this);
}
///
@@ -96,4 +100,13 @@ private void OnMPropertyChanged(object? sender, PropertyChangedEventArgs e)
if (this.IsProperty(e.PropertyName!))
OnPropertyChanged(e.PropertyName);
}
+
+ public void Receive(ValueChangedMessage message)
+ {
+ OnPropertyChanged(nameof(MainSelection));
+ OnPropertyChanged(nameof(SubSelection));
+ OnPropertyChanged(nameof(Additional1));
+ OnPropertyChanged(nameof(Additional2));
+ OnPropertyChanged(nameof(Additional3));
+ }
}
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ViewModels/WizzardViewModel.cs b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ViewModels/WizzardViewModel.cs
index de03675bc..8151f2b12 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ViewModels/WizzardViewModel.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/ViewModels/WizzardViewModel.cs
@@ -14,11 +14,15 @@
using BaseLib.Helper;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
+using CommunityToolkit.Mvvm.Messaging;
+using CommunityToolkit.Mvvm.Messaging.__Internals;
+using CommunityToolkit.Mvvm.Messaging.Messages;
using MVVM.View.Extension;
using MVVM.ViewModel;
using MVVM_40_Wizzard.Models;
using System;
using System.ComponentModel;
+using System.Globalization;
using System.Reflection;
///
@@ -38,6 +42,7 @@ public partial class WizzardViewModel : BaseViewModelCT
/// The model
///
private readonly IWizzardModel _model;
+ private readonly IMessenger _messenger;
///
/// Gets the now.
@@ -87,7 +92,7 @@ public bool Tab4Enabled
///
/// Initializes a new instance of the class.
///
- public WizzardViewModel() : this(IoC.GetRequiredService())
+ public WizzardViewModel() : this(IoC.GetRequiredService(), IoC.GetRequiredService())
{
}
@@ -95,10 +100,11 @@ public WizzardViewModel() : this(IoC.GetRequiredService())
/// Initializes a new instance of the class.
///
/// The model.
- public WizzardViewModel(IWizzardModel model)
+ public WizzardViewModel(IWizzardModel model, IMessenger messenger)
{
_model = model;
_model.PropertyChanged += OnMPropertyChanged;
+ _messenger = messenger;
}
///
@@ -165,5 +171,28 @@ private void NextTab()
SelectedTab++;
}
+ [RelayCommand]
+ private void LangDe()
+ {
+ CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("de-DE");
+ CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("de-DE");
+ _messenger.Send(new ValueChangedMessage(CultureInfo.CurrentUICulture));
+ }
+
+ [RelayCommand]
+ private void LangEn()
+ {
+ CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
+ CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
+ _messenger.Send(new ValueChangedMessage(CultureInfo.CurrentUICulture));
+ }
+
+ [RelayCommand]
+ private void LangFr()
+ {
+ CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
+ CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
+ _messenger.Send(new ValueChangedMessage(CultureInfo.CurrentUICulture));
+ }
#endregion
}
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Views/Page1View.xaml b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Views/Page1View.xaml
index 26f01fe72..dd6dffa12 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Views/Page1View.xaml
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Views/Page1View.xaml
@@ -4,6 +4,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mvvm="clr-namespace:MVVM_40_Wizzard.ViewModels"
+ xmlns:vc="clr-namespace:MVVM.View.ValueConverter;assembly=MVVM_BaseLib"
xmlns:local="clr-namespace:MVVM_40_Wizzard.Views"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
@@ -11,6 +12,9 @@
+
+
+
@@ -24,7 +28,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Views/WizzardView.xaml b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Views/WizzardView.xaml
index 9ee4680c0..08b559ab9 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Views/WizzardView.xaml
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/Views/WizzardView.xaml
@@ -18,7 +18,14 @@
-
+
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 34ee70750..583c54292 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku.csproj
@@ -8,8 +8,7 @@
-
-
+
@@ -24,8 +23,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 950446a60..de5795433 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
@@ -9,6 +9,7 @@
+
@@ -20,8 +21,7 @@
-
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Resources/all64.png b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Resources/all64.png
deleted file mode 100644
index f4395fadd..000000000
Binary files a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Resources/all64.png and /dev/null differ
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Resources/all64_2.png b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Resources/all64_2.png
new file mode 100644
index 000000000..1e4cabefc
Binary files /dev/null and b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Resources/all64_2.png differ
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Resources/document_new_unlined_256.png b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Resources/document_new_unlined_256.png
deleted file mode 100644
index f7a790cf1..000000000
Binary files a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Resources/document_new_unlined_256.png and /dev/null differ
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/ValueConverters/DateTimeValueConverter.cs b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/ValueConverters/DateTimeValueConverter.cs
index a1b3f0e17..553db57c2 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/ValueConverters/DateTimeValueConverter.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/ValueConverters/DateTimeValueConverter.cs
@@ -15,7 +15,7 @@
using System.Globalization;
using System.Windows.Data;
-namespace MVVM_41_Sudoku.ValueConverter
+namespace MVVM_41_Sudoku.ValueConverters
{
///
/// Class CurrencyValueConverter.
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/ViewModels/SudokuViewModel.cs b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/ViewModels/SudokuViewModel.cs
index cba07630b..b8adce12b 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/ViewModels/SudokuViewModel.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/ViewModels/SudokuViewModel.cs
@@ -47,7 +47,7 @@ public partial class SudokuViewModel : BaseViewModelCT
public string SudokuFileName { get; private set; }
public Action CloseApp { get; set; }
- public string AllImgSource => $"pack://application:,,,/{Assembly.GetExecutingAssembly().GetName().Name};component/Resources/all64.png";
+ public string AllImgSource => $"pack://application:,,,/{Assembly.GetExecutingAssembly().GetName().Name};component/Resources/all64_2.png";
#endregion
#region Methods
@@ -126,7 +126,7 @@ private void Print()
PageRangeSelection = System.Windows.Controls.PageRangeSelection.AllPages
};
dPrintDialog?.Invoke(dialog, (p) => {
- PagePrinter.Print(p.PrintQueue,p.PrintTicket, "SuDoKu", _model.Values, _model.DrawSudoku);
+ PagePrinter.Print(p.PrintQueue,p.PrintTicket, $"SuDoKu {Path.GetFileNameWithoutExtension(SudokuFileName)}", _model.Values, _model.DrawSudoku);
});
}
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Views/SudokuView.xaml b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Views/SudokuView.xaml
index 63cba6bba..ace906cef 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Views/SudokuView.xaml
+++ b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/Views/SudokuView.xaml
@@ -5,7 +5,7 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:MVVM_41_Sudoku.Views"
xmlns:p="clr-namespace:MVVM_41_Sudoku.Properties"
- xmlns:vc="clr-namespace:MVVM_41_Sudoku.ValueConverter"
+ xmlns:vc="clr-namespace:MVVM_41_Sudoku.ValueConverters"
xmlns:vc2="clr-namespace:MVVM_41_Sudoku.Views.Converter"
xmlns:mvvm="clr-namespace:MVVM_41_Sudoku.ViewModels"
xmlns:model="clr-namespace:MVVM_41_Sudoku.Models"
@@ -16,23 +16,22 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -80,7 +79,6 @@
-
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/ValueConverters/DateTimeValueConverterTests.cs b/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/ValueConverters/DateTimeValueConverterTests.cs
index 72cd8679d..a5e57eca0 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/ValueConverters/DateTimeValueConverterTests.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/ValueConverters/DateTimeValueConverterTests.cs
@@ -19,7 +19,7 @@
/// The Tests namespace.
///
///
-namespace MVVM_41_Sudoku.ValueConverter.Tests
+namespace MVVM_41_Sudoku.ValueConverters.Tests
{
///
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/App.xaml.cs b/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/App.xaml.cs
index 81f91a4a2..1683fc8b6 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/App.xaml.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/App.xaml.cs
@@ -15,6 +15,9 @@
using Microsoft.Extensions.DependencyInjection;
using MVVM.View.Extension;
using System.Windows;
+using BaseLib.Helper;
+using BaseLib.Helper.MVVM;
+using BaseLib.Interfaces;
namespace MVVM_AllExamples
{
@@ -27,16 +30,19 @@ protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var sc = new ServiceCollection()
- .AddTransient()
+ .AddTransient()
+ .AddTransient()
+ .AddSingleton()
+ .AddSingleton(WeakReferenceMessenger.Default)
+
.AddSingleton()
.AddSingleton()
.AddTransient()
.AddTransient()
- .AddTransient()
- .AddTransient()
+ .AddSingleton()
+ .AddSingleton()
.AddSingleton()
.AddSingleton()
- .AddSingleton(WeakReferenceMessenger.Default)
.AddTransient()
.AddTransient()
.AddTransient()
@@ -51,12 +57,12 @@ protected override void OnStartup(StartupEventArgs e)
.AddTransient()
.AddTransient()
.AddTransient()
- .AddSingleton()
.AddSingleton()
.AddScoped()
.AddSingleton()
+ .AddSingleton()
;
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples.csproj b/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples.csproj
index d52b4b0b7..ef55c9731 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples.csproj
@@ -37,8 +37,10 @@
+
+
@@ -47,6 +49,7 @@
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples_net.csproj
index d3d240e43..758036c67 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples_net.csproj
@@ -38,8 +38,10 @@
+
+
@@ -48,6 +50,7 @@
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/Models/AllExampleModel.cs b/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/Models/AllExampleModel.cs
index 5a40e303c..d7c452c69 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/Models/AllExampleModel.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/Models/AllExampleModel.cs
@@ -80,6 +80,7 @@ public partial class AllExampleModel : ObservableObject, ITemplateModel
("UserControlView2",typeof(MVVM_24a_CTUserControl.Views.UserControlView),null),
("UserControlView3",typeof(MVVM_24b_UserControl.Views.UserControlView),null),
("UserControlView4",typeof(MVVM_24c_CTUserControl.Views.UserControlView),null),
+ ("RichTextView",typeof(MVVM_25_RichTextEdit.Views.RichTextEditView),null),
("BindingGroupView",typeof(MVVM_26_BindingGroupExp.Views.BindingGroupView),null),
("Events_to_Commands",typeof(MVVM_33_Events_To_Commands.Views.EventBindingView),null),
@@ -90,6 +91,7 @@ public partial class AllExampleModel : ObservableObject, ITemplateModel
("DependencyInjection",typeof(MVVM_38_CTDependencyInjection.Views.DependencyInjectionView),null),
("MultiModel",typeof(MVVM_39_MultiModelTest.Views.MultiModelMainView),null),
("Wizzard",typeof(MVVM_40_Wizzard.Views.WizzardView),null),
+ ("SuDoKu",typeof(MVVM_41_Sudoku.Views.SudokuView),null),
("SyncAsyncParallel",typeof(SyncAsyncParallel.Views.SyncAsyncView),null),
@@ -111,7 +113,7 @@ public AllExampleModel()
try
{
Debug.WriteLine($"{ex.Description} {ex.ExType}");
- var desc = new Dictionary();
+ var desc = new Dictionary();
Type? t = ex.ExType.Assembly.GetTypes().First((t) => t.Name.EndsWith(nameof(Resources)));
if (t != null)
{
@@ -119,7 +121,7 @@ public AllExampleModel()
if (prop.PropertyType == typeof(string))
{
Debug.WriteLine($" {prop.Name} {prop.PropertyType} ");
- desc[prop.Name] = (string)prop.GetValue(null);
+ desc[prop.Name] = (string?)prop.GetValue(null);
}
ex.Additionals = desc;
}
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_Tutorial.sln b/CSharpBible/MVVM_Tutorial/MVVM_Tutorial.sln
index 3b35089ad..28bf786b8 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_Tutorial.sln
+++ b/CSharpBible/MVVM_Tutorial/MVVM_Tutorial.sln
@@ -384,6 +384,34 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_36_ComToolKtSavesWork_
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_36_ComToolKtSavesWork_netTests", "MVVM_36_ComToolKtSavesWorkTests\MVVM_36_ComToolKtSavesWork_netTests.csproj", "{699BE446-1BD4-4139-AE3F-827DDC4CD09B}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_25_RichTextEdit", "MVVM_25_RichTextEdit\MVVM_25_RichTextEdit.csproj", "{42961F52-76B0-42A8-84FB-CB27FCCFEE94}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_25_RichTextEdit_net", "MVVM_25_RichTextEdit\MVVM_25_RichTextEdit_net.csproj", "{3AE24E70-25AE-468B-A077-1ED729DF3221}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_25_RichTextEdit_netTests", "MVVM_25_RichTextEditTests\MVVM_25_RichTextEdit_netTests.csproj", "{76105A31-FA5A-403A-A727-8CA9E4AA194D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_25_RichTextEditTests", "MVVM_25_RichTextEditTests\MVVM_25_RichTextEditTests.csproj", "{D857B29A-8794-45A7-A609-C83BE48D9EC7}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_41-50", "MVVM_41-50", "{34209E5C-0417-4908-B557-827AB4328CD6}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_41_Sudoku", "MVVM_41_Sudoku\MVVM_41_Sudoku.csproj", "{804CFBF7-7BD2-43F0-9841-8DF696642983}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Games", "Games", "{8F46F2A2-AB34-48A6-9896-1BDD8CEBCBE9}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sudoku_Base", "..\Games\Sudoku_Base\Sudoku_Base.csproj", "{9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sudoku_BaseTests", "..\Games\Sudoku_BaseTests\Sudoku_BaseTests.csproj", "{710F291F-D51B-4E9D-B792-15EC3997419A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_41_Sudoku_net", "MVVM_41_Sudoku\MVVM_41_Sudoku_net.csproj", "{7948CE4C-39FC-4D28-989A-6AB67202D2E1}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_41_Sudoku_netTests", "MVVM_41_SudokuTests\MVVM_41_Sudoku_netTests.csproj", "{6DE04A68-AE12-4044-A643-37A88505B43C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_41_SudokuTests", "MVVM_41_SudokuTests\MVVM_41_SudokuTests.csproj", "{4B6AEA4A-52B7-49F4-A085-458388E4C6F1}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_22_WpfCap_netTests", "MVVM_22_WpfCapTests\MVVM_22_WpfCap_netTests.csproj", "{7FA83646-1EC1-4385-848E-32EBBCC5B137}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_22_WpfCapTests", "MVVM_22_WpfCapTests\MVVM_22_WpfCapTests.csproj", "{0F4BD485-28EE-414B-9C19-BBBF7E480EFD}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -4028,6 +4056,246 @@ Global
{699BE446-1BD4-4139-AE3F-827DDC4CD09B}.Release|x64.Build.0 = Release|Any CPU
{699BE446-1BD4-4139-AE3F-827DDC4CD09B}.Release|x86.ActiveCfg = Release|Any CPU
{699BE446-1BD4-4139-AE3F-827DDC4CD09B}.Release|x86.Build.0 = Release|Any CPU
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94}.Debug|ARM.Build.0 = Debug|Any CPU
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94}.Debug|x64.Build.0 = Debug|Any CPU
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94}.Debug|x86.Build.0 = Debug|Any CPU
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94}.Release|Any CPU.Build.0 = Release|Any CPU
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94}.Release|ARM.ActiveCfg = Release|Any CPU
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94}.Release|ARM.Build.0 = Release|Any CPU
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94}.Release|ARM64.Build.0 = Release|Any CPU
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94}.Release|x64.ActiveCfg = Release|Any CPU
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94}.Release|x64.Build.0 = Release|Any CPU
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94}.Release|x86.ActiveCfg = Release|Any CPU
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94}.Release|x86.Build.0 = Release|Any CPU
+ {3AE24E70-25AE-468B-A077-1ED729DF3221}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3AE24E70-25AE-468B-A077-1ED729DF3221}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3AE24E70-25AE-468B-A077-1ED729DF3221}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {3AE24E70-25AE-468B-A077-1ED729DF3221}.Debug|ARM.Build.0 = Debug|Any CPU
+ {3AE24E70-25AE-468B-A077-1ED729DF3221}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {3AE24E70-25AE-468B-A077-1ED729DF3221}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {3AE24E70-25AE-468B-A077-1ED729DF3221}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {3AE24E70-25AE-468B-A077-1ED729DF3221}.Debug|x64.Build.0 = Debug|Any CPU
+ {3AE24E70-25AE-468B-A077-1ED729DF3221}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {3AE24E70-25AE-468B-A077-1ED729DF3221}.Debug|x86.Build.0 = Debug|Any CPU
+ {3AE24E70-25AE-468B-A077-1ED729DF3221}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3AE24E70-25AE-468B-A077-1ED729DF3221}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3AE24E70-25AE-468B-A077-1ED729DF3221}.Release|ARM.ActiveCfg = Release|Any CPU
+ {3AE24E70-25AE-468B-A077-1ED729DF3221}.Release|ARM.Build.0 = Release|Any CPU
+ {3AE24E70-25AE-468B-A077-1ED729DF3221}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {3AE24E70-25AE-468B-A077-1ED729DF3221}.Release|ARM64.Build.0 = Release|Any CPU
+ {3AE24E70-25AE-468B-A077-1ED729DF3221}.Release|x64.ActiveCfg = Release|Any CPU
+ {3AE24E70-25AE-468B-A077-1ED729DF3221}.Release|x64.Build.0 = Release|Any CPU
+ {3AE24E70-25AE-468B-A077-1ED729DF3221}.Release|x86.ActiveCfg = Release|Any CPU
+ {3AE24E70-25AE-468B-A077-1ED729DF3221}.Release|x86.Build.0 = Release|Any CPU
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D}.Debug|ARM.Build.0 = Debug|Any CPU
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D}.Debug|x64.Build.0 = Debug|Any CPU
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D}.Debug|x86.Build.0 = Debug|Any CPU
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D}.Release|ARM.ActiveCfg = Release|Any CPU
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D}.Release|ARM.Build.0 = Release|Any CPU
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D}.Release|ARM64.Build.0 = Release|Any CPU
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D}.Release|x64.ActiveCfg = Release|Any CPU
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D}.Release|x64.Build.0 = Release|Any CPU
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D}.Release|x86.ActiveCfg = Release|Any CPU
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D}.Release|x86.Build.0 = Release|Any CPU
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7}.Debug|ARM.Build.0 = Debug|Any CPU
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7}.Debug|x64.Build.0 = Debug|Any CPU
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7}.Debug|x86.Build.0 = Debug|Any CPU
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7}.Release|ARM.ActiveCfg = Release|Any CPU
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7}.Release|ARM.Build.0 = Release|Any CPU
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7}.Release|ARM64.Build.0 = Release|Any CPU
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7}.Release|x64.ActiveCfg = Release|Any CPU
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7}.Release|x64.Build.0 = Release|Any CPU
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7}.Release|x86.ActiveCfg = Release|Any CPU
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7}.Release|x86.Build.0 = Release|Any CPU
+ {804CFBF7-7BD2-43F0-9841-8DF696642983}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {804CFBF7-7BD2-43F0-9841-8DF696642983}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {804CFBF7-7BD2-43F0-9841-8DF696642983}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {804CFBF7-7BD2-43F0-9841-8DF696642983}.Debug|ARM.Build.0 = Debug|Any CPU
+ {804CFBF7-7BD2-43F0-9841-8DF696642983}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {804CFBF7-7BD2-43F0-9841-8DF696642983}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {804CFBF7-7BD2-43F0-9841-8DF696642983}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {804CFBF7-7BD2-43F0-9841-8DF696642983}.Debug|x64.Build.0 = Debug|Any CPU
+ {804CFBF7-7BD2-43F0-9841-8DF696642983}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {804CFBF7-7BD2-43F0-9841-8DF696642983}.Debug|x86.Build.0 = Debug|Any CPU
+ {804CFBF7-7BD2-43F0-9841-8DF696642983}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {804CFBF7-7BD2-43F0-9841-8DF696642983}.Release|Any CPU.Build.0 = Release|Any CPU
+ {804CFBF7-7BD2-43F0-9841-8DF696642983}.Release|ARM.ActiveCfg = Release|Any CPU
+ {804CFBF7-7BD2-43F0-9841-8DF696642983}.Release|ARM.Build.0 = Release|Any CPU
+ {804CFBF7-7BD2-43F0-9841-8DF696642983}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {804CFBF7-7BD2-43F0-9841-8DF696642983}.Release|ARM64.Build.0 = Release|Any CPU
+ {804CFBF7-7BD2-43F0-9841-8DF696642983}.Release|x64.ActiveCfg = Release|Any CPU
+ {804CFBF7-7BD2-43F0-9841-8DF696642983}.Release|x64.Build.0 = Release|Any CPU
+ {804CFBF7-7BD2-43F0-9841-8DF696642983}.Release|x86.ActiveCfg = Release|Any CPU
+ {804CFBF7-7BD2-43F0-9841-8DF696642983}.Release|x86.Build.0 = Release|Any CPU
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}.Debug|ARM.Build.0 = Debug|Any CPU
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}.Debug|x64.Build.0 = Debug|Any CPU
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}.Debug|x86.Build.0 = Debug|Any CPU
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}.Release|ARM.ActiveCfg = Release|Any CPU
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}.Release|ARM.Build.0 = Release|Any CPU
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}.Release|ARM64.Build.0 = Release|Any CPU
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}.Release|x64.ActiveCfg = Release|Any CPU
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}.Release|x64.Build.0 = Release|Any CPU
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}.Release|x86.ActiveCfg = Release|Any CPU
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC}.Release|x86.Build.0 = Release|Any CPU
+ {710F291F-D51B-4E9D-B792-15EC3997419A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {710F291F-D51B-4E9D-B792-15EC3997419A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {710F291F-D51B-4E9D-B792-15EC3997419A}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {710F291F-D51B-4E9D-B792-15EC3997419A}.Debug|ARM.Build.0 = Debug|Any CPU
+ {710F291F-D51B-4E9D-B792-15EC3997419A}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {710F291F-D51B-4E9D-B792-15EC3997419A}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {710F291F-D51B-4E9D-B792-15EC3997419A}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {710F291F-D51B-4E9D-B792-15EC3997419A}.Debug|x64.Build.0 = Debug|Any CPU
+ {710F291F-D51B-4E9D-B792-15EC3997419A}.Debug|x86.ActiveCfg = Debug|x86
+ {710F291F-D51B-4E9D-B792-15EC3997419A}.Debug|x86.Build.0 = Debug|x86
+ {710F291F-D51B-4E9D-B792-15EC3997419A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {710F291F-D51B-4E9D-B792-15EC3997419A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {710F291F-D51B-4E9D-B792-15EC3997419A}.Release|ARM.ActiveCfg = Release|Any CPU
+ {710F291F-D51B-4E9D-B792-15EC3997419A}.Release|ARM.Build.0 = Release|Any CPU
+ {710F291F-D51B-4E9D-B792-15EC3997419A}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {710F291F-D51B-4E9D-B792-15EC3997419A}.Release|ARM64.Build.0 = Release|Any CPU
+ {710F291F-D51B-4E9D-B792-15EC3997419A}.Release|x64.ActiveCfg = Release|Any CPU
+ {710F291F-D51B-4E9D-B792-15EC3997419A}.Release|x64.Build.0 = Release|Any CPU
+ {710F291F-D51B-4E9D-B792-15EC3997419A}.Release|x86.ActiveCfg = Release|x86
+ {710F291F-D51B-4E9D-B792-15EC3997419A}.Release|x86.Build.0 = Release|x86
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1}.Debug|ARM.Build.0 = Debug|Any CPU
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1}.Debug|x64.Build.0 = Debug|Any CPU
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1}.Debug|x86.Build.0 = Debug|Any CPU
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1}.Release|ARM.ActiveCfg = Release|Any CPU
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1}.Release|ARM.Build.0 = Release|Any CPU
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1}.Release|ARM64.Build.0 = Release|Any CPU
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1}.Release|x64.ActiveCfg = Release|Any CPU
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1}.Release|x64.Build.0 = Release|Any CPU
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1}.Release|x86.ActiveCfg = Release|Any CPU
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1}.Release|x86.Build.0 = Release|Any CPU
+ {6DE04A68-AE12-4044-A643-37A88505B43C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6DE04A68-AE12-4044-A643-37A88505B43C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6DE04A68-AE12-4044-A643-37A88505B43C}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {6DE04A68-AE12-4044-A643-37A88505B43C}.Debug|ARM.Build.0 = Debug|Any CPU
+ {6DE04A68-AE12-4044-A643-37A88505B43C}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {6DE04A68-AE12-4044-A643-37A88505B43C}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {6DE04A68-AE12-4044-A643-37A88505B43C}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {6DE04A68-AE12-4044-A643-37A88505B43C}.Debug|x64.Build.0 = Debug|Any CPU
+ {6DE04A68-AE12-4044-A643-37A88505B43C}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {6DE04A68-AE12-4044-A643-37A88505B43C}.Debug|x86.Build.0 = Debug|Any CPU
+ {6DE04A68-AE12-4044-A643-37A88505B43C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6DE04A68-AE12-4044-A643-37A88505B43C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6DE04A68-AE12-4044-A643-37A88505B43C}.Release|ARM.ActiveCfg = Release|Any CPU
+ {6DE04A68-AE12-4044-A643-37A88505B43C}.Release|ARM.Build.0 = Release|Any CPU
+ {6DE04A68-AE12-4044-A643-37A88505B43C}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {6DE04A68-AE12-4044-A643-37A88505B43C}.Release|ARM64.Build.0 = Release|Any CPU
+ {6DE04A68-AE12-4044-A643-37A88505B43C}.Release|x64.ActiveCfg = Release|Any CPU
+ {6DE04A68-AE12-4044-A643-37A88505B43C}.Release|x64.Build.0 = Release|Any CPU
+ {6DE04A68-AE12-4044-A643-37A88505B43C}.Release|x86.ActiveCfg = Release|Any CPU
+ {6DE04A68-AE12-4044-A643-37A88505B43C}.Release|x86.Build.0 = Release|Any CPU
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1}.Debug|ARM.Build.0 = Debug|Any CPU
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1}.Debug|x64.Build.0 = Debug|Any CPU
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1}.Debug|x86.Build.0 = Debug|Any CPU
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1}.Release|ARM.ActiveCfg = Release|Any CPU
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1}.Release|ARM.Build.0 = Release|Any CPU
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1}.Release|ARM64.Build.0 = Release|Any CPU
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1}.Release|x64.ActiveCfg = Release|Any CPU
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1}.Release|x64.Build.0 = Release|Any CPU
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1}.Release|x86.ActiveCfg = Release|Any CPU
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1}.Release|x86.Build.0 = Release|Any CPU
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137}.Debug|ARM.Build.0 = Debug|Any CPU
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137}.Debug|x64.Build.0 = Debug|Any CPU
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137}.Debug|x86.Build.0 = Debug|Any CPU
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137}.Release|ARM.ActiveCfg = Release|Any CPU
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137}.Release|ARM.Build.0 = Release|Any CPU
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137}.Release|ARM64.Build.0 = Release|Any CPU
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137}.Release|x64.ActiveCfg = Release|Any CPU
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137}.Release|x64.Build.0 = Release|Any CPU
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137}.Release|x86.ActiveCfg = Release|Any CPU
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137}.Release|x86.Build.0 = Release|Any CPU
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD}.Debug|ARM.Build.0 = Debug|Any CPU
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD}.Debug|x64.Build.0 = Debug|Any CPU
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD}.Debug|x86.Build.0 = Debug|Any CPU
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD}.Release|ARM.ActiveCfg = Release|Any CPU
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD}.Release|ARM.Build.0 = Release|Any CPU
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD}.Release|ARM64.Build.0 = Release|Any CPU
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD}.Release|x64.ActiveCfg = Release|Any CPU
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD}.Release|x64.Build.0 = Release|Any CPU
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD}.Release|x86.ActiveCfg = Release|Any CPU
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -4210,6 +4478,18 @@ Global
{E7655950-EF55-45FC-B3CE-40BA2ECD2D6F} = {B8CF2D14-8B8B-428A-82D2-95613D8E45FF}
{ABC97E16-E272-4371-B5AA-50A6E896E4D0} = {204E8C5E-A768-4B83-9B09-7574DC769782}
{699BE446-1BD4-4139-AE3F-827DDC4CD09B} = {204E8C5E-A768-4B83-9B09-7574DC769782}
+ {42961F52-76B0-42A8-84FB-CB27FCCFEE94} = {0FB1C8A8-0903-4371-BFA6-E684A60FB4AE}
+ {3AE24E70-25AE-468B-A077-1ED729DF3221} = {0FB1C8A8-0903-4371-BFA6-E684A60FB4AE}
+ {76105A31-FA5A-403A-A727-8CA9E4AA194D} = {0FB1C8A8-0903-4371-BFA6-E684A60FB4AE}
+ {D857B29A-8794-45A7-A609-C83BE48D9EC7} = {0FB1C8A8-0903-4371-BFA6-E684A60FB4AE}
+ {804CFBF7-7BD2-43F0-9841-8DF696642983} = {34209E5C-0417-4908-B557-827AB4328CD6}
+ {9234FCA2-E7B7-4FED-B665-8F1FEF9CCAEC} = {8F46F2A2-AB34-48A6-9896-1BDD8CEBCBE9}
+ {710F291F-D51B-4E9D-B792-15EC3997419A} = {8F46F2A2-AB34-48A6-9896-1BDD8CEBCBE9}
+ {7948CE4C-39FC-4D28-989A-6AB67202D2E1} = {34209E5C-0417-4908-B557-827AB4328CD6}
+ {6DE04A68-AE12-4044-A643-37A88505B43C} = {34209E5C-0417-4908-B557-827AB4328CD6}
+ {4B6AEA4A-52B7-49F4-A085-458388E4C6F1} = {34209E5C-0417-4908-B557-827AB4328CD6}
+ {7FA83646-1EC1-4385-848E-32EBBCC5B137} = {0FB1C8A8-0903-4371-BFA6-E684A60FB4AE}
+ {0F4BD485-28EE-414B-9C19-BBBF7E480EFD} = {0FB1C8A8-0903-4371-BFA6-E684A60FB4AE}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {2CC7E938-9864-4DE7-9C91-23CCBC3FC27D}
diff --git a/CSharpBible/MVVM_Tutorial/ReadMe.md b/CSharpBible/MVVM_Tutorial/ReadMe.md
index 2db1da5fa..c5db9eb0d 100644
--- a/CSharpBible/MVVM_Tutorial/ReadMe.md
+++ b/CSharpBible/MVVM_Tutorial/ReadMe.md
@@ -66,6 +66,11 @@ It's a game: goal to sort all colors of the tiles.
## Lession 24: UserControls extended
Some extended user-controls.
+## Lession 25: RichTextEditor
+Use RichTextEdit to write formated text
+Included a preview and a source-view
+
+
## Lession 27&28: Datagrid
Use a Datagrid to diaplay data
* First: a simple form with a Datagrid
@@ -103,5 +108,11 @@ An demo-app having 2 models.
showcase for scoped dependency-injection.
## Lession 40: Wizzard
-A demo-wizzard app.
-With succesive asking the user for information.
\ No newline at end of file
+A demo-wizzard app.
+With succesive asking the user for information.
+
+## Lession 41: a SuDoKu game/viewer
+A SuDoKu-App
+Loading, Saving and printing
+Also shows how to use an external engine.
+
diff --git a/CSharpBible/Resources/MVVM_25_RichTextEdit.PNG b/CSharpBible/Resources/MVVM_25_RichTextEdit.PNG
new file mode 100644
index 000000000..b481c936b
Binary files /dev/null and b/CSharpBible/Resources/MVVM_25_RichTextEdit.PNG differ
diff --git a/CSharpBible/Resources/MVVM_41_SuDoKu.PNG b/CSharpBible/Resources/MVVM_41_SuDoKu.PNG
new file mode 100644
index 000000000..74e765837
Binary files /dev/null and b/CSharpBible/Resources/MVVM_41_SuDoKu.PNG differ
diff --git a/TestStatements/TestStatements/TestStatements.csproj b/TestStatements/TestStatements/TestStatements.csproj
index bb39862d2..bfbfa726b 100644
--- a/TestStatements/TestStatements/TestStatements.csproj
+++ b/TestStatements/TestStatements/TestStatements.csproj
@@ -63,9 +63,10 @@
-
-
+
+
+
diff --git a/TestStatements/TestStatements/TestStatements_net.csproj b/TestStatements/TestStatements/TestStatements_net.csproj
index 2a06747c4..e02952687 100644
--- a/TestStatements/TestStatements/TestStatements_net.csproj
+++ b/TestStatements/TestStatements/TestStatements_net.csproj
@@ -64,6 +64,8 @@
+
+
diff --git a/docs/index.html b/docs/index.html
index 146e74ff3..5efc4181d 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -6,10 +6,10 @@
BlazorWasmDocker
-
-
+
+
-
+
@@ -26,8 +26,8 @@
Reload
🗙
-
-
+
+