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( _f); + serviceScope.ServiceProvider.GetService(typeof(IServiceScopeFactory)).Returns( _f); return serviceScope; } @@ -106,10 +106,10 @@ public void SetCurrentScopeTest() var s = IoC.GetNewScope(); Assert.AreEqual("GetScope()\r\n", DebugLog); Assert.AreEqual(s,IoC.Scope); - s.ServiceProvider.GetService(typeof(object)).Returns(null); + s.ServiceProvider.GetService(typeof(object)).Returns(null); var s2 = IoC.GetNewScope(s); Assert.AreEqual(s2, IoC.Scope); - s2.ServiceProvider.GetService(typeof(object)).Returns(this); + s2.ServiceProvider.GetService(typeof(object)).Returns(this); IoC.SetCurrentScope(s2); Assert.AreEqual(s2, IoC.Scope); Assert.IsNotNull(IoC.GetRequiredService()); @@ -123,7 +123,7 @@ public void SetCurrentScopeTest() public void ConfigureTest() { var sp = Substitute.For(); - sp.GetService(typeof(IServiceScopeFactory)).Returns(_f); + sp.GetService(typeof(IServiceScopeFactory)).Returns(_f); sp.GetService(typeof(object)).Returns(this); IoC.Configure(sp); Assert.AreEqual(sp.GetService, IoC.GetSrv); diff --git a/CSharpBible/Libraries/MVVM_BaseLibTests/ViewModel/BaseTestViewModel.cs b/CSharpBible/Libraries/MVVM_BaseLibTests/ViewModel/BaseTestViewModel.cs index 77081781f..d484e3e07 100644 --- a/CSharpBible/Libraries/MVVM_BaseLibTests/ViewModel/BaseTestViewModel.cs +++ b/CSharpBible/Libraries/MVVM_BaseLibTests/ViewModel/BaseTestViewModel.cs @@ -27,10 +27,10 @@ namespace MVVM.ViewModel; /// /// Class BaseTestViewModel. -/// Implements the +/// Implements the /// /// -/// +/// public abstract class BaseTestViewModel : BaseTestViewModel where T : class, INotifyPropertyChanged, new() { /// @@ -86,9 +86,9 @@ public virtual void TestModelProperiesTest(string sPropName, TypeCode tPropType, /// /// Class BaseTestViewModel. -/// Implements the +/// Implements the /// -/// +/// public class BaseTestViewModel { /// diff --git a/CSharpBible/Libraries/MVVM_BaseLibTests/ViewModel/NotificationObjectCTTests.cs b/CSharpBible/Libraries/MVVM_BaseLibTests/ViewModel/NotificationObjectCTTests.cs index 7e2b1aaca..882afec2f 100644 --- a/CSharpBible/Libraries/MVVM_BaseLibTests/ViewModel/NotificationObjectCTTests.cs +++ b/CSharpBible/Libraries/MVVM_BaseLibTests/ViewModel/NotificationObjectCTTests.cs @@ -147,8 +147,8 @@ public enum eValidReact /// /// The arg1. /// The arg2. - /// A general exception occurred - /// Argument ({arg2}) not valid! + /// A general exception occurred + /// Argument ({arg2}) not valid! /// private void StringAct(string arg1, string arg2) { @@ -166,8 +166,8 @@ private void StringAct(string arg1, string arg2) /// /// The arg1. /// true if XXXX, false otherwise. - /// A general exception occurred - /// Argument ({arg1}) not valid! + /// A general exception occurred + /// Argument ({arg1}) not valid! /// private bool ValidateString(string arg1) { diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/Models/TemplateModel.cs b/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/Models/TemplateModel.cs index 36f64c71b..9ef64fdf7 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/Models/TemplateModel.cs +++ b/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplate/Models/TemplateModel.cs @@ -24,10 +24,10 @@ namespace MVVM_00a_CTTemplate.Models; /// /// Class TemplateModel. /// Implements the -/// Implements the +/// Implements the /// /// -/// +/// /// public partial class TemplateModel :ObservableObject, ITemplateModel { diff --git a/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommandTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommandTests.csproj index 19a7ef622..d7e15dff2 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommandTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommandTests.csproj @@ -1,4 +1,4 @@ - + net462-windows;net472-windows;net48-windows;net481-windows diff --git a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Model/CalculatorModel.cs b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Model/CalculatorModel.cs index d2ab3516f..7b20bfa1d 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Model/CalculatorModel.cs +++ b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/Model/CalculatorModel.cs @@ -25,10 +25,10 @@ namespace MVVM_05a_CTCommandParCalc.Model /// /// Class CalculatorModel. /// Implements the - /// Implements the + /// Implements the /// /// - /// + /// /// public partial class CalculatorModel : ObservableObject, ICalculatorModel { diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters/ValueConverter/CurrencyValueConverter.cs b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters/ValueConverter/CurrencyValueConverter.cs index 355c6342d..79b2cbffd 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters/ValueConverter/CurrencyValueConverter.cs +++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters/ValueConverter/CurrencyValueConverter.cs @@ -49,7 +49,7 @@ public object Convert(object? value, Type targetType, object parameter, CultureI /// The converter parameter to use. /// The culture to use in the converter. /// A converted value. If the method returns , the valid null value is used. - /// + /// public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3_netTests.csproj index 5772fbf36..c1a181993 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3_netTests.csproj @@ -9,13 +9,13 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/View/Converter/WindowPortToGridLines.cs b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/View/Converter/WindowPortToGridLines.cs index f38bf017e..af9a3ba34 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/View/Converter/WindowPortToGridLines.cs +++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/View/Converter/WindowPortToGridLines.cs @@ -148,7 +148,7 @@ public object Convert(object value, Type targetType, object parameter, CultureIn if (Math.Abs((Math.Abs(X1) + Step / 5) % BigStep) < Step / 2) { - result.Add(CreateLabel(X1, new System.Windows.Thickness((double)(P1x.X - lb.Width / 2d + 7), 0d, 0d, 0d), VerticalAlignment.Bottom, HorizontalAlignment.Center)); + result.Add(CreateLabel(X1, new Thickness((double)(P1x.X - lb.Width / 2d + 7), 0d, 0d, 0d), VerticalAlignment.Bottom, HorizontalAlignment.Center)); } } @@ -160,7 +160,7 @@ public object Convert(object value, Type targetType, object parameter, CultureIn result.Add(CreateLine(b, GetStroke(Y1, Step, BigStep), P1y, P2y)); if (Math.Abs((Math.Abs(Y1) + Step / 5) % BigStep) < Step / 2) { - result.Add(CreateLabel(Y1, new System.Windows.Thickness(0d, (double)(P1y.Y - hOffset - lb.Height + 5), 0d, 0d), VerticalAlignment.Center, HorizontalAlignment.Right)); + result.Add(CreateLabel(Y1, new Thickness(0d, (double)(P1y.Y - hOffset - lb.Height + 5), 0d, 0d), VerticalAlignment.Center, HorizontalAlignment.Right)); } } } @@ -379,7 +379,7 @@ private void ComputeGridSteps(double vpWidth, out double BigStep, out double Ste /// The converter parameter to use. /// The culture to use in the converter. /// A converted value. If the method returns , the valid null value is used. - /// + /// public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4_netTests.csproj index fb8da5723..8b186d422 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4_netTests.csproj @@ -9,13 +9,13 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/ViewModels/VehicleViewModelTests.cs b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/ViewModels/VehicleViewModelTests.cs index 2c21d02c1..9dea494b0 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/ViewModels/VehicleViewModelTests.cs +++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/ViewModels/VehicleViewModelTests.cs @@ -96,7 +96,7 @@ static IEnumerable VehicleViewModelPropertyTestData public void TestProperties(string sProp, string sName, object oVal, object oExp) { if (oVal is DateTime?) - testModel.SetProp(sProp, oVal as DateTime?); + testModel.SetProp(sProp, oVal as DateTime?); else if (sName != "ro") testModel.SetProp(sProp, oVal); Assert.AreEqual(oExp, testModel.GetProp(sProp)); diff --git a/CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/Converter/ColorConverter.cs b/CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/Converter/ColorConverter.cs index c788db1b5..3ef5aa25f 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/Converter/ColorConverter.cs +++ b/CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/Converter/ColorConverter.cs @@ -57,7 +57,7 @@ public object Convert(object value, Type targetType, object parameter, CultureIn /// The converter parameter to use. /// The culture to use in the converter. /// A converted value. If the method returns , the valid null value is used. - /// + /// public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); diff --git a/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/Converter/ColorConverter.cs b/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/Converter/ColorConverter.cs index 67abf7aca..ec21b5323 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/Converter/ColorConverter.cs +++ b/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/Converter/ColorConverter.cs @@ -57,7 +57,7 @@ public object Convert(object value, Type targetType, object parameter, CultureIn /// The converter parameter to use. /// The culture to use in the converter. /// A converted value. If the method returns , the valid null value is used. - /// + /// public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); diff --git a/CSharpBible/MVVM_Tutorial/MVVM_21_Buttons/Converter/BoolToColorConverter.cs b/CSharpBible/MVVM_Tutorial/MVVM_21_Buttons/Converter/BoolToColorConverter.cs index 50e107bf7..5a7bc6c3c 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_21_Buttons/Converter/BoolToColorConverter.cs +++ b/CSharpBible/MVVM_Tutorial/MVVM_21_Buttons/Converter/BoolToColorConverter.cs @@ -78,7 +78,7 @@ public object Convert(object value, Type targetType, object parameter, CultureIn /// Die im Konverter zu verwendende Kultur. /// Ein konvertierter Wert. /// Wenn die Methode zurückgibt, wird der gültige NULL-Wert verwendet. - /// + /// public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/App.xaml.cs b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/App.xaml.cs index 83f59ecf5..45877ef91 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/App.xaml.cs +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/App.xaml.cs @@ -11,11 +11,13 @@ // // // *********************************************************************** +using System.Windows; using Microsoft.Extensions.DependencyInjection; +using BaseLib.Interfaces; +using BaseLib.Helper.MVVM; using MVVM.View.Extension; using MVVM_22_CTWpfCap.Model; using MVVM_22_CTWpfCap.ViewModels; -using System.Windows; namespace MVVM_22_CTWpfCap { diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Model/CRandom.cs b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Model/CRandom.cs deleted file mode 100644 index 47327b2f7..000000000 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Model/CRandom.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; - -namespace MVVM_22_CTWpfCap.Model -{ - /// A class abstracting the Random function - public class CRandom : IRandom - { - private Random _rnd; - - public CRandom() { - _rnd = new Random(); - } - - /// Returns the next random number with the specified maximum (excl.). - /// The maximum. - /// The random value - public int Next(int max) => _rnd.Next(max); - - public void Seed(int seed) - { - _rnd = new Random(seed); - } - } -} diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Model/CWpfCapModel.cs b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Model/CWpfCapModel.cs index 169095ef1..43730e333 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Model/CWpfCapModel.cs +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Model/CWpfCapModel.cs @@ -1,4 +1,5 @@ -using System; +using BaseLib.Interfaces; +using System; namespace MVVM_22_CTWpfCap.Model { diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Model/IRandom.cs b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Model/IRandom.cs deleted file mode 100644 index 6c023d9f0..000000000 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/Model/IRandom.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace MVVM_22_CTWpfCap.Model -{ - /// Abstract interface for a random-(numbers) class - public interface IRandom - { - /// Returns the next random number with the specified maximum (excl.). - /// The maximum. - /// The random value - int Next(int max); - } -} diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCapTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCapTests.csproj index e6298fef6..9df46b062 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCapTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCapTests.csproj @@ -21,8 +21,8 @@ - - + + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/Model/CRandomTests.cs b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/Model/CRandomTests.cs deleted file mode 100644 index f73056e0d..000000000 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/Model/CRandomTests.cs +++ /dev/null @@ -1,46 +0,0 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; - -namespace MVVM_22_CTWpfCap.Model.Tests -{ - [TestClass()] - public class CRandomTests - { - private CRandom testRand =null!; - - [TestInitialize] - public void Init() - { - testRand = new CRandom(); - testRand.Seed(0); - } - [TestMethod()] - public void CRandomTest() - { - var _rnd=new CRandom(); - Assert.IsNotNull(_rnd); - Assert.IsInstanceOfType(_rnd, typeof(CRandom)); - Assert.IsInstanceOfType(_rnd, typeof(IRandom)); - Assert.AreEqual(0, _rnd.Next(1)); - Assert.AreEqual(0, _rnd.Next(2) / 2); - } - - [TestMethod()] - public void NextTest1() - { - Assert.AreEqual(726,testRand.Next(1000),"Next1"); - Assert.AreEqual(817, testRand.Next(1000), "Next2"); - Assert.AreEqual(768, testRand.Next(1000), "Next3"); - Assert.AreEqual(558, testRand.Next(1000), "Next4"); - } - - [DataTestMethod()] - [DataRow(0,1000,new int[] {726,817, 768, 558, 206 })] - [DataRow(1, 1000, new int[] { 248, 110, 467, 771, 657 })] - public void SeedTest(int iSeed,int iMax , int[] aiExp) - { - testRand.Seed(iSeed); - foreach(int i in aiExp) - Assert.AreEqual(i, testRand.Next(iMax),$"Imax({iSeed},{iMax}).Next =={i}" ); - } - } -} diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/Model/CWpfCapModelTests.cs b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/Model/CWpfCapModelTests.cs index 3997d619d..a26aa48b3 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/Model/CWpfCapModelTests.cs +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/Model/CWpfCapModelTests.cs @@ -1,5 +1,6 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; -using System; +using System; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using BaseLib.Helper.MVVM; namespace MVVM_22_CTWpfCap.Model.Tests { diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/App.xaml.cs b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/App.xaml.cs index 1dc17dc8a..3fe9a2cdb 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/App.xaml.cs +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/App.xaml.cs @@ -11,11 +11,13 @@ // // // *********************************************************************** +using System.Windows; using Microsoft.Extensions.DependencyInjection; +using BaseLib.Helper.MVVM; +using BaseLib.Interfaces; using MVVM.View.Extension; using MVVM_22_WpfCap.Model; using MVVM_22_WpfCap.ViewModels; -using System.Windows; namespace MVVM_22_WpfCap { diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Model/CRandom.cs b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Model/CRandom.cs deleted file mode 100644 index a499750da..000000000 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Model/CRandom.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; - -namespace MVVM_22_WpfCap.Model -{ - /// A class abstracting the Random function - public class CRandom : IRandom - { - private Random _rnd; - - public CRandom() { - _rnd = new Random(); - } - - /// Returns the next random number with the specified maximum (excl.). - /// The maximum. - /// The random value - public int Next(int max) => _rnd.Next(max); - - public void Seed(int seed) - { - _rnd = new Random(seed); - } - } -} diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Model/CWpfCapModel.cs b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Model/CWpfCapModel.cs index 62169d429..7e1cf9b68 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Model/CWpfCapModel.cs +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Model/CWpfCapModel.cs @@ -1,4 +1,5 @@ using System; +using BaseLib.Interfaces; namespace MVVM_22_WpfCap.Model { diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Model/IRandom.cs b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Model/IRandom.cs deleted file mode 100644 index f93510446..000000000 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/Model/IRandom.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace MVVM_22_WpfCap.Model -{ - /// Abstract interface for a random-(numbers) class - public interface IRandom - { - /// Returns the next random number with the specified maximum (excl.). - /// The maximum. - /// The random value - int Next(int max); - } -} \ No newline at end of file diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCap_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCap_netTests.csproj index 97ba72cff..a296206ef 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCap_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCap_netTests.csproj @@ -21,11 +21,11 @@ - - - - - + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/Model/CRandomTests.cs b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/Model/CRandomTests.cs deleted file mode 100644 index 9f7004a71..000000000 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/Model/CRandomTests.cs +++ /dev/null @@ -1,46 +0,0 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; - -namespace MVVM_22_WpfCap.Model.Tests -{ - [TestClass()] - public class CRandomTests - { - private CRandom testRand =null!; - - [TestInitialize] - public void Init() - { - testRand = new CRandom(); - testRand.Seed(0); - } - [TestMethod()] - public void CRandomTest() - { - var _rnd=new CRandom(); - Assert.IsNotNull(_rnd); - Assert.IsInstanceOfType(_rnd, typeof(CRandom)); - Assert.IsInstanceOfType(_rnd, typeof(IRandom)); - Assert.AreEqual(0, _rnd.Next(1)); - Assert.AreEqual(0, _rnd.Next(2) / 2); - } - - [TestMethod()] - public void NextTest1() - { - Assert.AreEqual(726,testRand.Next(1000),"Next1"); - Assert.AreEqual(817, testRand.Next(1000), "Next2"); - Assert.AreEqual(768, testRand.Next(1000), "Next3"); - Assert.AreEqual(558, testRand.Next(1000), "Next4"); - } - - [DataTestMethod()] - [DataRow(0,1000,new int[] {726,817, 768, 558, 206 })] - [DataRow(1, 1000, new int[] { 248, 110, 467, 771, 657 })] - public void SeedTest(int iSeed,int iMax , int[] aiExp) - { - testRand.Seed(iSeed); - foreach(int i in aiExp) - Assert.AreEqual(i, testRand.Next(iMax),$"Imax({iSeed},{iMax}).Next =={i}" ); - } - } -} \ No newline at end of file diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/Model/CWpfCapModelTests.cs b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/Model/CWpfCapModelTests.cs index 625d1a39c..a15a14475 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/Model/CWpfCapModelTests.cs +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/Model/CWpfCapModelTests.cs @@ -1,5 +1,6 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; -using System; +using System; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using BaseLib.Helper.MVVM; namespace MVVM_22_WpfCap.Model.Tests { diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/ViewModels/WpfCapViewModelTests.cs b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/ViewModels/WpfCapViewModelTests.cs index 467aeb474..b0b968178 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/ViewModels/WpfCapViewModelTests.cs +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/ViewModels/WpfCapViewModelTests.cs @@ -1,11 +1,11 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; -using MVVM_22_WpfCap.Model; -using System; -using System.Collections.Specialized; +using System; using System.ComponentModel; +using System.Collections.Specialized; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using MVVM_22_WpfCap.Model; using Telerik.JustMock; -namespace MVVM_22_WpfCap.ViewModel.Tests +namespace MVVM_22_WpfCap.ViewModels.Tests { public class TestWpfCapModel : IWpfCapModel { diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/Views/WpfCapViewTests.cs b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/Views/WpfCapViewTests.cs index ad85330b3..8032d3acf 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/Views/WpfCapViewTests.cs +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/Views/WpfCapViewTests.cs @@ -20,7 +20,7 @@ /// The Tests namespace. /// /// -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 @@ - /// -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
+MVVM_25_RichTextEdit
+ ## 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.
+MVVM_41_SuDoKu 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 🗙 - - + +