From 70fa8958130514cd109bc77200fe5a64f2ca58bb Mon Sep 17 00:00:00 2001 From: Adrian Hall Date: Thu, 29 Aug 2024 11:04:25 -0700 Subject: [PATCH 1/3] (#22) Initial version of the MAUI application. --- samples/todoapp/Samples.TodoApp.sln | 26 ++++ samples/todoapp/TodoApp.MAUI/App.xaml | 14 ++ samples/todoapp/TodoApp.MAUI/App.xaml.cs | 36 +++++ samples/todoapp/TodoApp.MAUI/MainPage.xaml | 60 ++++++++ samples/todoapp/TodoApp.MAUI/MainPage.xaml.cs | 51 +++++++ samples/todoapp/TodoApp.MAUI/MauiProgram.cs | 27 ++++ .../TodoApp.MAUI/Models/AppDbContext.cs | 56 +++++++ .../TodoApp.MAUI/Models/IDbInitializer.cs | 23 +++ .../Models/OfflineClientEntity.cs | 19 +++ .../todoapp/TodoApp.MAUI/Models/TodoItem.cs | 11 ++ .../Platforms/Android/AndroidManifest.xml | 6 + .../Platforms/Android/MainActivity.cs | 13 ++ .../Platforms/Android/MainApplication.cs | 18 +++ .../Android/Resources/values/colors.xml | 6 + .../Platforms/MacCatalyst/AppDelegate.cs | 12 ++ .../Platforms/MacCatalyst/Entitlements.plist | 14 ++ .../Platforms/MacCatalyst/Info.plist | 38 +++++ .../Platforms/MacCatalyst/Program.cs | 18 +++ .../TodoApp.MAUI/Platforms/Tizen/Main.cs | 20 +++ .../Platforms/Tizen/tizen-manifest.xml | 15 ++ .../TodoApp.MAUI/Platforms/Windows/App.xaml | 8 + .../Platforms/Windows/App.xaml.cs | 27 ++++ .../Platforms/Windows/Package.appxmanifest | 46 ++++++ .../Platforms/Windows/app.manifest | 15 ++ .../TodoApp.MAUI/Platforms/iOS/AppDelegate.cs | 12 ++ .../TodoApp.MAUI/Platforms/iOS/Info.plist | 32 ++++ .../TodoApp.MAUI/Platforms/iOS/Program.cs | 18 +++ .../iOS/Resources/PrivacyInfo.xcprivacy | 51 +++++++ .../Properties/launchSettings.json | 8 + .../Resources/AppIcon/appicon.svg | 4 + .../Resources/AppIcon/appiconfg.svg | 8 + .../Resources/Fonts/OpenSans-Regular.ttf | Bin 0 -> 107280 bytes .../Resources/Fonts/OpenSans-Semibold.ttf | Bin 0 -> 111168 bytes .../Resources/Images/dotnet_bot.png | Bin 0 -> 69811 bytes .../Resources/Raw/AboutAssets.txt | 15 ++ .../TodoApp.MAUI/Resources/Splash/splash.svg | 8 + .../TodoApp.MAUI/Resources/Styles/Colors.xaml | 44 ++++++ .../TodoApp.MAUI/Resources/Styles/Styles.xaml | 83 +++++++++++ .../todoapp/TodoApp.MAUI/TodoApp.MAUI.csproj | 69 +++++++++ .../todoapp/TodoApp.MAUI/Utils/IMVVMHelper.cs | 12 ++ .../TodoApp.MAUI/Utils/ServicesContainer.cs | 33 +++++ .../TodoApp.MAUI/ViewModels/MainViewModel.cs | 140 ++++++++++++++++++ 42 files changed, 1116 insertions(+) create mode 100644 samples/todoapp/TodoApp.MAUI/App.xaml create mode 100644 samples/todoapp/TodoApp.MAUI/App.xaml.cs create mode 100644 samples/todoapp/TodoApp.MAUI/MainPage.xaml create mode 100644 samples/todoapp/TodoApp.MAUI/MainPage.xaml.cs create mode 100644 samples/todoapp/TodoApp.MAUI/MauiProgram.cs create mode 100644 samples/todoapp/TodoApp.MAUI/Models/AppDbContext.cs create mode 100644 samples/todoapp/TodoApp.MAUI/Models/IDbInitializer.cs create mode 100644 samples/todoapp/TodoApp.MAUI/Models/OfflineClientEntity.cs create mode 100644 samples/todoapp/TodoApp.MAUI/Models/TodoItem.cs create mode 100644 samples/todoapp/TodoApp.MAUI/Platforms/Android/AndroidManifest.xml create mode 100644 samples/todoapp/TodoApp.MAUI/Platforms/Android/MainActivity.cs create mode 100644 samples/todoapp/TodoApp.MAUI/Platforms/Android/MainApplication.cs create mode 100644 samples/todoapp/TodoApp.MAUI/Platforms/Android/Resources/values/colors.xml create mode 100644 samples/todoapp/TodoApp.MAUI/Platforms/MacCatalyst/AppDelegate.cs create mode 100644 samples/todoapp/TodoApp.MAUI/Platforms/MacCatalyst/Entitlements.plist create mode 100644 samples/todoapp/TodoApp.MAUI/Platforms/MacCatalyst/Info.plist create mode 100644 samples/todoapp/TodoApp.MAUI/Platforms/MacCatalyst/Program.cs create mode 100644 samples/todoapp/TodoApp.MAUI/Platforms/Tizen/Main.cs create mode 100644 samples/todoapp/TodoApp.MAUI/Platforms/Tizen/tizen-manifest.xml create mode 100644 samples/todoapp/TodoApp.MAUI/Platforms/Windows/App.xaml create mode 100644 samples/todoapp/TodoApp.MAUI/Platforms/Windows/App.xaml.cs create mode 100644 samples/todoapp/TodoApp.MAUI/Platforms/Windows/Package.appxmanifest create mode 100644 samples/todoapp/TodoApp.MAUI/Platforms/Windows/app.manifest create mode 100644 samples/todoapp/TodoApp.MAUI/Platforms/iOS/AppDelegate.cs create mode 100644 samples/todoapp/TodoApp.MAUI/Platforms/iOS/Info.plist create mode 100644 samples/todoapp/TodoApp.MAUI/Platforms/iOS/Program.cs create mode 100644 samples/todoapp/TodoApp.MAUI/Platforms/iOS/Resources/PrivacyInfo.xcprivacy create mode 100644 samples/todoapp/TodoApp.MAUI/Properties/launchSettings.json create mode 100644 samples/todoapp/TodoApp.MAUI/Resources/AppIcon/appicon.svg create mode 100644 samples/todoapp/TodoApp.MAUI/Resources/AppIcon/appiconfg.svg create mode 100644 samples/todoapp/TodoApp.MAUI/Resources/Fonts/OpenSans-Regular.ttf create mode 100644 samples/todoapp/TodoApp.MAUI/Resources/Fonts/OpenSans-Semibold.ttf create mode 100644 samples/todoapp/TodoApp.MAUI/Resources/Images/dotnet_bot.png create mode 100644 samples/todoapp/TodoApp.MAUI/Resources/Raw/AboutAssets.txt create mode 100644 samples/todoapp/TodoApp.MAUI/Resources/Splash/splash.svg create mode 100644 samples/todoapp/TodoApp.MAUI/Resources/Styles/Colors.xaml create mode 100644 samples/todoapp/TodoApp.MAUI/Resources/Styles/Styles.xaml create mode 100644 samples/todoapp/TodoApp.MAUI/TodoApp.MAUI.csproj create mode 100644 samples/todoapp/TodoApp.MAUI/Utils/IMVVMHelper.cs create mode 100644 samples/todoapp/TodoApp.MAUI/Utils/ServicesContainer.cs create mode 100644 samples/todoapp/TodoApp.MAUI/ViewModels/MainViewModel.cs diff --git a/samples/todoapp/Samples.TodoApp.sln b/samples/todoapp/Samples.TodoApp.sln index 5692d55c..69781c3a 100644 --- a/samples/todoapp/Samples.TodoApp.sln +++ b/samples/todoapp/Samples.TodoApp.sln @@ -13,6 +13,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TodoApp.WPF", "TodoApp.WPF\ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample.Datasync.Server", "..\datasync-server\src\Sample.Datasync.Server\Sample.Datasync.Server.csproj", "{E67734DD-B397-4A65-AA50-D62F37EF05DD}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TodoApp.MAUI", "TodoApp.MAUI\TodoApp.MAUI.csproj", "{00430043-04C5-4F8F-87A9-98ECC0051808}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -97,6 +99,30 @@ Global {E67734DD-B397-4A65-AA50-D62F37EF05DD}.Release|x64.Build.0 = Release|Any CPU {E67734DD-B397-4A65-AA50-D62F37EF05DD}.Release|x86.ActiveCfg = Release|Any CPU {E67734DD-B397-4A65-AA50-D62F37EF05DD}.Release|x86.Build.0 = Release|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Debug|Any CPU.Build.0 = Debug|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Debug|ARM64.Build.0 = Debug|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Debug|ARM64.Deploy.0 = Debug|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Debug|x64.ActiveCfg = Debug|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Debug|x64.Build.0 = Debug|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Debug|x64.Deploy.0 = Debug|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Debug|x86.ActiveCfg = Debug|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Debug|x86.Build.0 = Debug|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Debug|x86.Deploy.0 = Debug|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Release|Any CPU.ActiveCfg = Release|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Release|Any CPU.Build.0 = Release|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Release|Any CPU.Deploy.0 = Release|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Release|ARM64.ActiveCfg = Release|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Release|ARM64.Build.0 = Release|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Release|ARM64.Deploy.0 = Release|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Release|x64.ActiveCfg = Release|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Release|x64.Build.0 = Release|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Release|x64.Deploy.0 = Release|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Release|x86.ActiveCfg = Release|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Release|x86.Build.0 = Release|Any CPU + {00430043-04C5-4F8F-87A9-98ECC0051808}.Release|x86.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/samples/todoapp/TodoApp.MAUI/App.xaml b/samples/todoapp/TodoApp.MAUI/App.xaml new file mode 100644 index 00000000..a8e18342 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/App.xaml @@ -0,0 +1,14 @@ + + + + + + + + + + + diff --git a/samples/todoapp/TodoApp.MAUI/App.xaml.cs b/samples/todoapp/TodoApp.MAUI/App.xaml.cs new file mode 100644 index 00000000..d8b6513d --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/App.xaml.cs @@ -0,0 +1,36 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +#if WINDOWS +using Microsoft.UI; +using Microsoft.UI.Windowing; +using Windows.Graphics; +#endif + +namespace TodoApp.MAUI; + +public partial class App : Application +{ +#if WINDOWS + const int WindowWidth = 400; + const int WindowHeight = 800; +#endif + + public App() + { + InitializeComponent(); + + Microsoft.Maui.Handlers.WindowHandler.Mapper.AppendToMapping(nameof(IWindow), (handler, view) => + { +#if WINDOWS + handler.PlatformView.Activate(); + + IntPtr windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(handler.PlatformView); + AppWindow appWindow = AppWindow.GetFromWindowId(Win32Interop.GetWindowIdFromWindow(windowHandle)); + appWindow.Resize(new SizeInt32(WindowWidth, WindowHeight)); +#endif + }); + MainPage = new NavigationPage(new MainPage()); + } +} diff --git a/samples/todoapp/TodoApp.MAUI/MainPage.xaml b/samples/todoapp/TodoApp.MAUI/MainPage.xaml new file mode 100644 index 00000000..1ba382a7 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/MainPage.xaml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/todoapp/TodoApp.MAUI/MainPage.xaml.cs b/samples/todoapp/TodoApp.MAUI/MainPage.xaml.cs new file mode 100644 index 00000000..75c8aeb8 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/MainPage.xaml.cs @@ -0,0 +1,51 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Diagnostics; +using TodoApp.MAUI.Models; +using TodoApp.MAUI.Utils; +using TodoApp.MAUI.ViewModels; + +namespace TodoApp.MAUI; + +public partial class MainPage : ContentPage, IMVVMHelper +{ + private readonly MainViewModel _viewModel; + + public MainPage() + { + InitializeComponent(); + this._viewModel = ServicesContainer.GetRequiredService(); + this._viewModel.MvvmHelper = this; + BindingContext = this._viewModel; + } + + protected override void OnAppearing() + { + base.OnAppearing(); + this._viewModel.OnActivated(); + } + + public void OnListItemTapped(object sender, ItemTappedEventArgs e) + { + if (e.Item is TodoItem item) + { + Debug.WriteLine($"[UI] >>> Item clicked: {item.Id}"); + this._viewModel.SelectItemCommand.Execute(item); + } + + if (sender is ListView itemList) + { + itemList.SelectedItem = null; + } + } + + public Task RunOnUiThreadAsync(Action func) + => MainThread.InvokeOnMainThreadAsync(func); + + public Task DisplayErrorAlertAsync(string title, string message) + => RunOnUiThreadAsync(async () => await DisplayAlert(title, message, "OK")); + +} + diff --git a/samples/todoapp/TodoApp.MAUI/MauiProgram.cs b/samples/todoapp/TodoApp.MAUI/MauiProgram.cs new file mode 100644 index 00000000..c000581f --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/MauiProgram.cs @@ -0,0 +1,27 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Microsoft.Extensions.Logging; + +namespace TodoApp.MAUI; +public static class MauiProgram +{ + public static MauiApp CreateMauiApp() + { + MauiAppBuilder builder = MauiApp.CreateBuilder(); + builder + .UseMauiApp() + .ConfigureFonts(fonts => + { + fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); + fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); + }); + +#if DEBUG + builder.Logging.AddDebug(); +#endif + + return builder.Build(); + } +} diff --git a/samples/todoapp/TodoApp.MAUI/Models/AppDbContext.cs b/samples/todoapp/TodoApp.MAUI/Models/AppDbContext.cs new file mode 100644 index 00000000..5081504a --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Models/AppDbContext.cs @@ -0,0 +1,56 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Microsoft.EntityFrameworkCore; + +namespace TodoApp.MAUI.Models; + +public class AppDbContext(DbContextOptions options) : DbContext(options) +{ + public DbSet TodoItems => Set(); + + //protected override void OnDatasyncInitialization(DatasyncOfflineOptionsBuilder optionsBuilder) + //{ + // HttpClientOptions clientOptions = new() + // { + // Endpoint = new Uri("https://YOURSITEHERE.azurewebsites.net/"), + // HttpPipeline = [new LoggingHandler()] + // }; + // _ = optionsBuilder.UseHttpClientOptions(clientOptions); + //} + + public async Task SynchronizeAsync(CancellationToken cancellationToken = default) + { + //PushResult pushResult = await this.PushAsync(cancellationToken); + //if (!pushResult.IsSuccessful) + //{ + // throw new ApplicationException($"Push failed: {pushResult.FailedRequests.FirstOrDefault().Value.ReasonPhrase}"); + //} + + //PullResult pullResult = await this.PullAsync(cancellationToken); + //if (!pullResult.IsSuccessful) + //{ + // throw new ApplicationException($"Pull failed: {pullResult.FailedRequests.FirstOrDefault().Value.ReasonPhrase}"); + //} + } +} + +/// +/// Use this class to initialize the database. In this sample, we just create +/// the database. However, you may want to use migrations. +/// +/// The context for the database. +public class DbContextInitializer(AppDbContext context) : IDbInitializer +{ + /// + public void Initialize() + { + _ = context.Database.EnsureCreated(); + // Task.Run(async () => await context.SynchronizeAsync()); + } + + /// + public Task InitializeAsync(CancellationToken cancellationToken = default) + => context.Database.EnsureCreatedAsync(cancellationToken); +} diff --git a/samples/todoapp/TodoApp.MAUI/Models/IDbInitializer.cs b/samples/todoapp/TodoApp.MAUI/Models/IDbInitializer.cs new file mode 100644 index 00000000..3dd29360 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Models/IDbInitializer.cs @@ -0,0 +1,23 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace TodoApp.MAUI.Models; + +/// +/// An interface to initialize a database. +/// +public interface IDbInitializer +{ + /// + /// Synchronously initialize the database. + /// + void Initialize(); + + /// + /// Asynchronously initialize the database. + /// + /// A to observe. + /// A task that resolves when complete. + Task InitializeAsync(CancellationToken cancellationToken = default); +} diff --git a/samples/todoapp/TodoApp.MAUI/Models/OfflineClientEntity.cs b/samples/todoapp/TodoApp.MAUI/Models/OfflineClientEntity.cs new file mode 100644 index 00000000..f4f07cdd --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Models/OfflineClientEntity.cs @@ -0,0 +1,19 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.ComponentModel.DataAnnotations; + +namespace TodoApp.MAUI.Models; + +/// +/// An abstract class for working with offline entities. +/// +public abstract class OfflineClientEntity +{ + [Key] + public string Id { get; set; } = Guid.NewGuid().ToString("N"); + public DateTimeOffset? UpdatedAt { get; set; } + public string? Version { get; set; } + public bool Deleted { get; set; } +} diff --git a/samples/todoapp/TodoApp.MAUI/Models/TodoItem.cs b/samples/todoapp/TodoApp.MAUI/Models/TodoItem.cs new file mode 100644 index 00000000..54557cfe --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Models/TodoItem.cs @@ -0,0 +1,11 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace TodoApp.MAUI.Models; + +public class TodoItem : OfflineClientEntity +{ + public string Title { get; set; } = string.Empty; + public bool IsComplete { get; set; } = false; +} diff --git a/samples/todoapp/TodoApp.MAUI/Platforms/Android/AndroidManifest.xml b/samples/todoapp/TodoApp.MAUI/Platforms/Android/AndroidManifest.xml new file mode 100644 index 00000000..e9937ad7 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Platforms/Android/AndroidManifest.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/samples/todoapp/TodoApp.MAUI/Platforms/Android/MainActivity.cs b/samples/todoapp/TodoApp.MAUI/Platforms/Android/MainActivity.cs new file mode 100644 index 00000000..ea6f382a --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Platforms/Android/MainActivity.cs @@ -0,0 +1,13 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Android.App; +using Android.Content.PM; +using Android.OS; + +namespace TodoApp.MAUI; +[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, LaunchMode = LaunchMode.SingleTop, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)] +public class MainActivity : MauiAppCompatActivity +{ +} diff --git a/samples/todoapp/TodoApp.MAUI/Platforms/Android/MainApplication.cs b/samples/todoapp/TodoApp.MAUI/Platforms/Android/MainApplication.cs new file mode 100644 index 00000000..e7e73a5a --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Platforms/Android/MainApplication.cs @@ -0,0 +1,18 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Android.App; +using Android.Runtime; + +namespace TodoApp.MAUI; +[Application] +public class MainApplication : MauiApplication +{ + public MainApplication(IntPtr handle, JniHandleOwnership ownership) + : base(handle, ownership) + { + } + + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} diff --git a/samples/todoapp/TodoApp.MAUI/Platforms/Android/Resources/values/colors.xml b/samples/todoapp/TodoApp.MAUI/Platforms/Android/Resources/values/colors.xml new file mode 100644 index 00000000..c04d7492 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Platforms/Android/Resources/values/colors.xml @@ -0,0 +1,6 @@ + + + #512BD4 + #2B0B98 + #2B0B98 + \ No newline at end of file diff --git a/samples/todoapp/TodoApp.MAUI/Platforms/MacCatalyst/AppDelegate.cs b/samples/todoapp/TodoApp.MAUI/Platforms/MacCatalyst/AppDelegate.cs new file mode 100644 index 00000000..82815a29 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Platforms/MacCatalyst/AppDelegate.cs @@ -0,0 +1,12 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Foundation; + +namespace TodoApp.MAUI; +[Register("AppDelegate")] +public class AppDelegate : MauiUIApplicationDelegate +{ + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} diff --git a/samples/todoapp/TodoApp.MAUI/Platforms/MacCatalyst/Entitlements.plist b/samples/todoapp/TodoApp.MAUI/Platforms/MacCatalyst/Entitlements.plist new file mode 100644 index 00000000..de4adc94 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Platforms/MacCatalyst/Entitlements.plist @@ -0,0 +1,14 @@ + + + + + + + com.apple.security.app-sandbox + + + com.apple.security.network.client + + + + diff --git a/samples/todoapp/TodoApp.MAUI/Platforms/MacCatalyst/Info.plist b/samples/todoapp/TodoApp.MAUI/Platforms/MacCatalyst/Info.plist new file mode 100644 index 00000000..72689771 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Platforms/MacCatalyst/Info.plist @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + UIDeviceFamily + + 2 + + UIRequiredDeviceCapabilities + + arm64 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + XSAppIconAssets + Assets.xcassets/appicon.appiconset + + diff --git a/samples/todoapp/TodoApp.MAUI/Platforms/MacCatalyst/Program.cs b/samples/todoapp/TodoApp.MAUI/Platforms/MacCatalyst/Program.cs new file mode 100644 index 00000000..73a49570 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Platforms/MacCatalyst/Program.cs @@ -0,0 +1,18 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using ObjCRuntime; +using UIKit; + +namespace TodoApp.MAUI; +public class Program +{ + // This is the main entry point of the application. + static void Main(string[] args) + { + // if you want to use a different Application Delegate class from "AppDelegate" + // you can specify it here. + UIApplication.Main(args, null, typeof(AppDelegate)); + } +} diff --git a/samples/todoapp/TodoApp.MAUI/Platforms/Tizen/Main.cs b/samples/todoapp/TodoApp.MAUI/Platforms/Tizen/Main.cs new file mode 100644 index 00000000..5e9b619b --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Platforms/Tizen/Main.cs @@ -0,0 +1,20 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Microsoft.Maui; +using Microsoft.Maui.Hosting; +using System; + +namespace TodoApp.MAUI; + +internal class Program : MauiApplication +{ + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); + + static void Main(string[] args) + { + var app = new Program(); + app.Run(args); + } +} diff --git a/samples/todoapp/TodoApp.MAUI/Platforms/Tizen/tizen-manifest.xml b/samples/todoapp/TodoApp.MAUI/Platforms/Tizen/tizen-manifest.xml new file mode 100644 index 00000000..bf392494 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Platforms/Tizen/tizen-manifest.xml @@ -0,0 +1,15 @@ + + + + + + maui-appicon-placeholder + + + + + http://tizen.org/privilege/internet + + + + \ No newline at end of file diff --git a/samples/todoapp/TodoApp.MAUI/Platforms/Windows/App.xaml b/samples/todoapp/TodoApp.MAUI/Platforms/Windows/App.xaml new file mode 100644 index 00000000..1a6b9393 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Platforms/Windows/App.xaml @@ -0,0 +1,8 @@ + + + diff --git a/samples/todoapp/TodoApp.MAUI/Platforms/Windows/App.xaml.cs b/samples/todoapp/TodoApp.MAUI/Platforms/Windows/App.xaml.cs new file mode 100644 index 00000000..e5466cf7 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Platforms/Windows/App.xaml.cs @@ -0,0 +1,27 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Microsoft.UI.Xaml; + +// To learn more about WinUI, the WinUI project structure, +// and more about our project templates, see: http://aka.ms/winui-project-info. + +namespace TodoApp.MAUI.WinUI; +/// +/// Provides application-specific behavior to supplement the default Application class. +/// +public partial class App : MauiWinUIApplication +{ + /// + /// Initializes the singleton application object. This is the first line of authored code + /// executed, and as such is the logical equivalent of main() or WinMain(). + /// + public App() + { + this.InitializeComponent(); + } + + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} + diff --git a/samples/todoapp/TodoApp.MAUI/Platforms/Windows/Package.appxmanifest b/samples/todoapp/TodoApp.MAUI/Platforms/Windows/Package.appxmanifest new file mode 100644 index 00000000..e38c09b0 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Platforms/Windows/Package.appxmanifest @@ -0,0 +1,46 @@ + + + + + + + + + $placeholder$ + User Name + $placeholder$.png + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/todoapp/TodoApp.MAUI/Platforms/Windows/app.manifest b/samples/todoapp/TodoApp.MAUI/Platforms/Windows/app.manifest new file mode 100644 index 00000000..23739960 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Platforms/Windows/app.manifest @@ -0,0 +1,15 @@ + + + + + + + + true/PM + PerMonitorV2, PerMonitor + + + diff --git a/samples/todoapp/TodoApp.MAUI/Platforms/iOS/AppDelegate.cs b/samples/todoapp/TodoApp.MAUI/Platforms/iOS/AppDelegate.cs new file mode 100644 index 00000000..82815a29 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Platforms/iOS/AppDelegate.cs @@ -0,0 +1,12 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Foundation; + +namespace TodoApp.MAUI; +[Register("AppDelegate")] +public class AppDelegate : MauiUIApplicationDelegate +{ + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} diff --git a/samples/todoapp/TodoApp.MAUI/Platforms/iOS/Info.plist b/samples/todoapp/TodoApp.MAUI/Platforms/iOS/Info.plist new file mode 100644 index 00000000..0004a4fd --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Platforms/iOS/Info.plist @@ -0,0 +1,32 @@ + + + + + LSRequiresIPhoneOS + + UIDeviceFamily + + 1 + 2 + + UIRequiredDeviceCapabilities + + arm64 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + XSAppIconAssets + Assets.xcassets/appicon.appiconset + + diff --git a/samples/todoapp/TodoApp.MAUI/Platforms/iOS/Program.cs b/samples/todoapp/TodoApp.MAUI/Platforms/iOS/Program.cs new file mode 100644 index 00000000..73a49570 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Platforms/iOS/Program.cs @@ -0,0 +1,18 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using ObjCRuntime; +using UIKit; + +namespace TodoApp.MAUI; +public class Program +{ + // This is the main entry point of the application. + static void Main(string[] args) + { + // if you want to use a different Application Delegate class from "AppDelegate" + // you can specify it here. + UIApplication.Main(args, null, typeof(AppDelegate)); + } +} diff --git a/samples/todoapp/TodoApp.MAUI/Platforms/iOS/Resources/PrivacyInfo.xcprivacy b/samples/todoapp/TodoApp.MAUI/Platforms/iOS/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 00000000..24ab3b43 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Platforms/iOS/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,51 @@ + + + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + C617.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategorySystemBootTime + NSPrivacyAccessedAPITypeReasons + + 35F9.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryDiskSpace + NSPrivacyAccessedAPITypeReasons + + E174.1 + + + + + + diff --git a/samples/todoapp/TodoApp.MAUI/Properties/launchSettings.json b/samples/todoapp/TodoApp.MAUI/Properties/launchSettings.json new file mode 100644 index 00000000..edf8aadc --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Properties/launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "Windows Machine": { + "commandName": "MsixPackage", + "nativeDebugging": false + } + } +} \ No newline at end of file diff --git a/samples/todoapp/TodoApp.MAUI/Resources/AppIcon/appicon.svg b/samples/todoapp/TodoApp.MAUI/Resources/AppIcon/appicon.svg new file mode 100644 index 00000000..9d63b651 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Resources/AppIcon/appicon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/samples/todoapp/TodoApp.MAUI/Resources/AppIcon/appiconfg.svg b/samples/todoapp/TodoApp.MAUI/Resources/AppIcon/appiconfg.svg new file mode 100644 index 00000000..21dfb25f --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Resources/AppIcon/appiconfg.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/samples/todoapp/TodoApp.MAUI/Resources/Fonts/OpenSans-Regular.ttf b/samples/todoapp/TodoApp.MAUI/Resources/Fonts/OpenSans-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2291fcbc7cc88366a2c5048ff5772d4db229e73b GIT binary patch literal 107280 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

0C@IF3gewTVPZfOUyua?!UhB1RSqM3B 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 literal 0 HcmV?d00001 diff --git a/samples/todoapp/TodoApp.MAUI/Resources/Fonts/OpenSans-Semibold.ttf b/samples/todoapp/TodoApp.MAUI/Resources/Fonts/OpenSans-Semibold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3cbe2f8ee002dac65cc32913c8a6539e38575b75 GIT binary patch literal 111168 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 literal 0 HcmV?d00001 diff --git a/samples/todoapp/TodoApp.MAUI/Resources/Images/dotnet_bot.png b/samples/todoapp/TodoApp.MAUI/Resources/Images/dotnet_bot.png new file mode 100644 index 0000000000000000000000000000000000000000..f93ce025a8aadac29138413514bef90c11d892d9 GIT binary patch literal 69811 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%0A7N@|Cy{eV1d|BD;UZbFy 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 literal 0 HcmV?d00001 diff --git a/samples/todoapp/TodoApp.MAUI/Resources/Raw/AboutAssets.txt b/samples/todoapp/TodoApp.MAUI/Resources/Raw/AboutAssets.txt new file mode 100644 index 00000000..89dc758d --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Resources/Raw/AboutAssets.txt @@ -0,0 +1,15 @@ +Any raw assets you want to be deployed with your application can be placed in +this directory (and child directories). Deployment of the asset to your application +is automatically handled by the following `MauiAsset` Build Action within your `.csproj`. + + + +These files will be deployed with your package and will be accessible using Essentials: + + async Task LoadMauiAsset() + { + using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt"); + using var reader = new StreamReader(stream); + + var contents = reader.ReadToEnd(); + } diff --git a/samples/todoapp/TodoApp.MAUI/Resources/Splash/splash.svg b/samples/todoapp/TodoApp.MAUI/Resources/Splash/splash.svg new file mode 100644 index 00000000..21dfb25f --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Resources/Splash/splash.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/samples/todoapp/TodoApp.MAUI/Resources/Styles/Colors.xaml b/samples/todoapp/TodoApp.MAUI/Resources/Styles/Colors.xaml new file mode 100644 index 00000000..43ebcded --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Resources/Styles/Colors.xaml @@ -0,0 +1,44 @@ + + + + + #512BD4 + #DFD8F7 + #2B0B98 + White + Black + #E1E1E1 + #C8C8C8 + #ACACAC + #919191 + #6E6E6E + #404040 + #212121 + #141414 + + + + + + + + + + + + + + + #F7B548 + #FFD590 + #FFE5B9 + #28C2D1 + #7BDDEF + #C3F2F4 + #3E8EED + #72ACF1 + #A7CBF6 + + \ No newline at end of file diff --git a/samples/todoapp/TodoApp.MAUI/Resources/Styles/Styles.xaml b/samples/todoapp/TodoApp.MAUI/Resources/Styles/Styles.xaml new file mode 100644 index 00000000..4d66d4ad --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Resources/Styles/Styles.xaml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/todoapp/TodoApp.MAUI/TodoApp.MAUI.csproj b/samples/todoapp/TodoApp.MAUI/TodoApp.MAUI.csproj new file mode 100644 index 00000000..ef45db92 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/TodoApp.MAUI.csproj @@ -0,0 +1,69 @@ + + + + net8.0-android;net8.0-ios;net8.0-maccatalyst + $(TargetFrameworks);net8.0-windows10.0.19041.0 + + + + + + + Exe + TodoApp.MAUI + true + true + enable + enable + + + TodoApp.MAUI + + + com.companyname.todoapp.maui + + + 1.0 + 1 + + 11.0 + 13.1 + 21.0 + 10.0.17763.0 + 10.0.17763.0 + 6.5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/todoapp/TodoApp.MAUI/Utils/IMVVMHelper.cs b/samples/todoapp/TodoApp.MAUI/Utils/IMVVMHelper.cs new file mode 100644 index 00000000..0ba9f470 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Utils/IMVVMHelper.cs @@ -0,0 +1,12 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace TodoApp.MAUI.Utils; + +public interface IMVVMHelper +{ + Task RunOnUiThreadAsync(Action func); + + Task DisplayErrorAlertAsync(string title, string message); +} \ No newline at end of file diff --git a/samples/todoapp/TodoApp.MAUI/Utils/ServicesContainer.cs b/samples/todoapp/TodoApp.MAUI/Utils/ServicesContainer.cs new file mode 100644 index 00000000..d775e839 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Utils/ServicesContainer.cs @@ -0,0 +1,33 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Microsoft.Data.Sqlite; +using Microsoft.EntityFrameworkCore; +using TodoApp.MAUI.Models; +using TodoApp.MAUI.ViewModels; + +namespace TodoApp.MAUI.Utils; +internal static class ServicesContainer +{ + private static readonly Lazy dbConnection = new(() => new("Data Source=:memory:")); + private static readonly Lazy Services = new(() => CreateServiceProvider()); + + private static ServiceProvider CreateServiceProvider() + { + ServiceProvider serviceProvider = new ServiceCollection() + .AddTransient() + .AddScoped() + .AddDbContext(options => options.UseSqlite(dbConnection.Value)) + .BuildServiceProvider(); + + using IServiceScope scope = serviceProvider.CreateScope(); + IDbInitializer initializer = scope.ServiceProvider.GetRequiredService(); + initializer.Initialize(); + + return serviceProvider; + } + + public static TService GetRequiredService() where TService : notnull + => Services.Value.GetRequiredService(); +} diff --git a/samples/todoapp/TodoApp.MAUI/ViewModels/MainViewModel.cs b/samples/todoapp/TodoApp.MAUI/ViewModels/MainViewModel.cs new file mode 100644 index 00000000..03dd68c6 --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/ViewModels/MainViewModel.cs @@ -0,0 +1,140 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using CommunityToolkit.Datasync.Client; +using Microsoft.EntityFrameworkCore; +using System.ComponentModel; +using System.Windows.Input; +using TodoApp.MAUI.Models; +using TodoApp.MAUI.Utils; + +namespace TodoApp.MAUI.ViewModels; + +public class MainViewModel(AppDbContext context) : INotifyPropertyChanged +{ + private bool _isRefreshing = false; + + public IMVVMHelper? MvvmHelper { get; set; } + + public ICommand AddItemCommand + => new Command(async (Entry entry) => await AddItemAsync(entry.Text)); + + public ICommand RefreshItemsCommand + => new Command(async () => await RefreshItemsAsync()); + + public ICommand SelectItemCommand + => new Command(async (TodoItem item) => await UpdateItemAsync(item.Id, !item.IsComplete)); + + public ConcurrentObservableCollection Items { get; } = new(); + + public bool IsRefreshing + { + get => this._isRefreshing; + set => SetProperty(ref this._isRefreshing, value, nameof(IsRefreshing)); + } + + public async void OnActivated() + { + await RefreshItemsAsync(); + } + + public async Task RefreshItemsAsync() + { + if (IsRefreshing) + { + return; + } + + try + { + await context.SynchronizeAsync(); + List items = await context.TodoItems.ToListAsync(); + await MvvmHelper!.RunOnUiThreadAsync(() => + { + Items.ReplaceAll(items); + }); + } + catch (Exception ex) + { + await MvvmHelper!.DisplayErrorAlertAsync("RefreshItems", ex.Message); + } + finally + { + await SetRefreshing(false); + } + } + + public async Task UpdateItemAsync(string itemId, bool isComplete) + { + try + { + TodoItem? item = await context.TodoItems.FindAsync([itemId]); + if (item is not null) + { + item.IsComplete = isComplete; + _ = context.TodoItems.Update(item); + _ = Items.ReplaceIf(x => x.Id == itemId, item); + _ = await context.SaveChangesAsync(); + } + } + catch (Exception ex) + { + await MvvmHelper!.DisplayErrorAlertAsync("UpdateItem", ex.Message); + } + } + + public async Task AddItemAsync(string text) + { + try + { + TodoItem item = new() { Title = text }; + _ = context.TodoItems.Add(item); + _ = await context.SaveChangesAsync(); + Items.Add(item); + } + catch (Exception ex) + { + await MvvmHelper!.DisplayErrorAlertAsync("AddItem", ex.Message); + } + } + + private Task SetRefreshing(bool value) + => MvvmHelper!.RunOnUiThreadAsync(() => IsRefreshing = value); + + #region INotifyPropertyChanged + /// + /// The event handler required by + /// + public event PropertyChangedEventHandler? PropertyChanged; + + /// + /// Sets a backing store value and notify watchers of the change. The type must + /// implement for proper comparisons. + /// + /// The type of the value + /// The backing store + /// The new value + /// + protected void SetProperty(ref T storage, T value, string? propertyName = null) where T : notnull + { + if (!storage.Equals(value)) + { + storage = value; + NotifyPropertyChanged(propertyName); + } + } + + /// + /// Notifies the data context that the property named has changed value. + /// + /// The name of the property + protected void NotifyPropertyChanged(string? propertyName = null) + { + if (propertyName != null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } + #endregion +} From d39bfbc1e79ac98e2b61652e69e1e7aebd7ed14a Mon Sep 17 00:00:00 2001 From: Adrian Hall Date: Thu, 29 Aug 2024 11:31:48 -0700 Subject: [PATCH 2/3] (#22) MAUI application. --- samples/todoapp/TodoApp.MAUI/App.xaml.cs | 62 +++++++++++++++++- samples/todoapp/TodoApp.MAUI/MainPage.xaml.cs | 7 +- .../TodoApp.MAUI/Resources/Images/additem.png | Bin 0 -> 373 bytes .../Resources/Images/completed.png | Bin 0 -> 1102 bytes .../TodoApp.MAUI/Resources/Images/refresh.png | Bin 0 -> 866 bytes .../TodoApp.MAUI/Services/AlertService.cs | 15 +++++ .../{Utils => Services}/IMVVMHelper.cs | 0 .../todoapp/TodoApp.MAUI/TodoApp.MAUI.csproj | 6 ++ .../TodoApp.MAUI/Utils/ServicesContainer.cs | 33 ---------- .../TodoApp.MAUI/ViewModels/MainViewModel.cs | 22 ++----- 10 files changed, 93 insertions(+), 52 deletions(-) create mode 100644 samples/todoapp/TodoApp.MAUI/Resources/Images/additem.png create mode 100644 samples/todoapp/TodoApp.MAUI/Resources/Images/completed.png create mode 100644 samples/todoapp/TodoApp.MAUI/Resources/Images/refresh.png create mode 100644 samples/todoapp/TodoApp.MAUI/Services/AlertService.cs rename samples/todoapp/TodoApp.MAUI/{Utils => Services}/IMVVMHelper.cs (100%) delete mode 100644 samples/todoapp/TodoApp.MAUI/Utils/ServicesContainer.cs diff --git a/samples/todoapp/TodoApp.MAUI/App.xaml.cs b/samples/todoapp/TodoApp.MAUI/App.xaml.cs index d8b6513d..6172d556 100644 --- a/samples/todoapp/TodoApp.MAUI/App.xaml.cs +++ b/samples/todoapp/TodoApp.MAUI/App.xaml.cs @@ -8,19 +8,41 @@ using Windows.Graphics; #endif +using Microsoft.Data.Sqlite; +using Microsoft.EntityFrameworkCore; +using TodoApp.MAUI.Models; +using TodoApp.MAUI.ViewModels; +using TodoApp.MAUI.Services; + namespace TodoApp.MAUI; -public partial class App : Application +public partial class App : Application, IDisposable { #if WINDOWS const int WindowWidth = 400; const int WindowHeight = 800; #endif + private readonly SqliteConnection dbConnection; + + public IServiceProvider Services { get; } + public App() { InitializeComponent(); + this.dbConnection = new SqliteConnection("Data Source=:memory:"); + this.dbConnection.Open(); + + Services = new ServiceCollection() + .AddTransient() + .AddTransient() + .AddScoped() + .AddDbContext(options => options.UseSqlite(this.dbConnection)) + .BuildServiceProvider(); + + InitializeDatabase(); + Microsoft.Maui.Handlers.WindowHandler.Mapper.AppendToMapping(nameof(IWindow), (handler, view) => { #if WINDOWS @@ -33,4 +55,42 @@ public App() }); MainPage = new NavigationPage(new MainPage()); } + + private void InitializeDatabase() + { + using IServiceScope scope = Services.CreateScope(); + IDbInitializer initializer = scope.ServiceProvider.GetRequiredService(); + initializer.Initialize(); + } + + /// + /// A helper method for getting a service from the services collection. + /// + /// The type of the service. + /// An instance of the service + public static TService GetRequiredService() where TService : notnull + => ((App)App.Current!).Services.GetRequiredService(); + + #region IDisposable + private bool hasDisposed; + + protected virtual void Dispose(bool disposing) + { + if (!this.hasDisposed) + { + if (disposing) + { + this.dbConnection.Close(); + } + + this.hasDisposed = true; + } + } + + public void Dispose() + { + Dispose(disposing: true); + GC.SuppressFinalize(this); + } + #endregion } diff --git a/samples/todoapp/TodoApp.MAUI/MainPage.xaml.cs b/samples/todoapp/TodoApp.MAUI/MainPage.xaml.cs index 75c8aeb8..46ddb5e5 100644 --- a/samples/todoapp/TodoApp.MAUI/MainPage.xaml.cs +++ b/samples/todoapp/TodoApp.MAUI/MainPage.xaml.cs @@ -16,8 +16,8 @@ public partial class MainPage : ContentPage, IMVVMHelper public MainPage() { InitializeComponent(); - this._viewModel = ServicesContainer.GetRequiredService(); - this._viewModel.MvvmHelper = this; + this._viewModel = App.GetRequiredService(); + //this._viewModel.MvvmHelper = this; BindingContext = this._viewModel; } @@ -41,11 +41,12 @@ public void OnListItemTapped(object sender, ItemTappedEventArgs e) } } + #region IMVVMHelper public Task RunOnUiThreadAsync(Action func) => MainThread.InvokeOnMainThreadAsync(func); public Task DisplayErrorAlertAsync(string title, string message) => RunOnUiThreadAsync(async () => await DisplayAlert(title, message, "OK")); - + #endregion } diff --git a/samples/todoapp/TodoApp.MAUI/Resources/Images/additem.png b/samples/todoapp/TodoApp.MAUI/Resources/Images/additem.png new file mode 100644 index 0000000000000000000000000000000000000000..336647933fe4599d80f75fdb1fde84a11b007f44 GIT binary patch literal 373 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCmUKs7M+SzC{oH>NS%G|oWRD45dJguM!v-tY$DUh!@P+6=(yLU`z6LcLCBs@Y8vBJ&@uo z@Q5sCVBk9f!i-b3`J{n@L7py-AsP4HUU%d>ARyx4`1bGnHR&53xLR!%yWh>5%)l@= z{qeoeN7j@l9}r~9fGPW`{);2J(GBA);em4n4LvDUbW?Cg~ z4LNmTdO!`5ARB`7(@M${i&7cN%ggmL^RkPR6AM!H@{7`Ezq647Dq`?-^>bP0l+XkK DhrDoO literal 0 HcmV?d00001 diff --git a/samples/todoapp/TodoApp.MAUI/Resources/Images/completed.png b/samples/todoapp/TodoApp.MAUI/Resources/Images/completed.png new file mode 100644 index 0000000000000000000000000000000000000000..8ac0e7f1a52185ce9b9c909c958f3ceeed3f4413 GIT binary patch literal 1102 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCmUKs7M+SzC{oH>NS%G|oWRD45dJguM!v-tY$DUh!@P+6=(yLU`z6LcLCBs@Y8vBJ&@uo z@Q5sCVBk9f!i-b3`J@>bn6*7!978hhy`6d6FW6C}&0cW}o7CFQ2_}JhwTygU4@~t} zsAUtF=WxX%XG*q?9gB-V4Ric~!>v_|S(=Vz^ty2-tS~>?JyW*)+Puu~^K4VI-^}+> zm>c>3*Y!7+>l*cT{n%f4NZ6m>fGg%|y*|V92FBR`!aq3nu*Na?H$HbTe$A)B$bEqQ zfktBG`dsfw4tr)D#&*6#sg_q_jy@KOXWUmIpywT1T+Xw1*YX^uZw;vlQWDH;jdrnY zjfJt>7u~*9k#%c&_#7599X@-;%?|ZU`|1+7Zfq&Y%b0(!>R;zUPv#lV&wD*?vPqO=X z$n!bXby{WJ^y_JFdLgj?@Ub>+m*+=i{?(xI3B04D`Z(@ zZdB*}t9I{N>&`PqI~{h4xg>YRQZ>iscH&3Jm2I!qckhy2yH@vD>qEJdW}4w2jT#se z;;-}{Q{1oFGtF2){=viyWAWn$lM_wmPONBHb}$MVM>8i`zorvG3nP}q?qtLoFfbEVkZXx4{XazQfB6sqRjbBR4LnPs9|job~f zn(vbZX6Tu`yOGOTA=^Vsm@?Bnz9+;v)e({qy;YwqUUhcVaf_AU~ix_U~nlE&{9)^B)T*_bS; zwpjjOfAJ>i)h^{XKFo;!a`UsAPmbS4IOzQZLBO-2`TaTXJ96V>! z;@n`{Pd{tYWEFp%iMsHWeMS1U@&m?Kj9+{IYf8TcOvu+iO3yVh*KSUO_QmvAUQh^kMk%5tcu7QQFfpLhDk(IHfm65Twfq|8Q!S28BJWw>`=BH$)RpQog zYC+f+paw~h4Z-BuF?hQAxvXNS%G|oWRD45dJguM!v-tY$DUh!@P+6=(yLU`z6LcLCBs@Y8vBJ&@uo z@Q5sCVBk9f!i-b3`J@>bnCv}W978hhy}fZdOTVI(R zb=+pb{OouK!Mk2Aynz#ExL=qc9&n*mqCoJD_o8E`cNn>SU@N@Hd1RK{+nMX$Mc$}i z;mZ4E<@?o^rLUY^!9b?Uu&2;xahv?7$@({aW&@IFrpSsOi3o zd*6(?Gc*q$Snw;$cxJH8SMF^F%)+mV_f6fB8CE00y!Vy)N@LZ|{-gv84h!|@t(}T? zU5y_V9%OVrS}ZYxk4a815UA>5o3Vs)#>^Uio+oSV0#8OCzwIZ+%zlsI-Ps>-%b`gKpys_^H#~#nWfsbMs+5Fg(uc$1)s&R+E zX@9JlShw!0{4DdNbLSeKRHl4o2!1r>A)gILlKzk1-LBp-!TZnNKb5)2`IqgFpq!5z z$o@;tw_+r)1~PWvHx?cu5?b2o=Ryk8L5XgR;t?oQ^V z6X`M2mxSqEb1}K3Y^g4Lr0&hJv_FU3YbMxiw4Y>?p(|#+UK9lWGw)|yyt15q%7m}o z!1SeB;u=wsl30>zm0Xkxq!^40j0|)QjdTqyLX3>842-OdEwl{`tPBh;#y%HA(U6;; zl9^VCTf+i|_*Fm+k{}y`^V3So6N^$A%FE03GV`*FlM@S4_413-XTP(N0xDwgboFyt I=akR{0ExO?!vFvP literal 0 HcmV?d00001 diff --git a/samples/todoapp/TodoApp.MAUI/Services/AlertService.cs b/samples/todoapp/TodoApp.MAUI/Services/AlertService.cs new file mode 100644 index 00000000..923e459d --- /dev/null +++ b/samples/todoapp/TodoApp.MAUI/Services/AlertService.cs @@ -0,0 +1,15 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace TodoApp.MAUI.Services; +public interface IAlertService +{ + Task ShowErrorAlertAsync(string title, string message, string cancel = "OK"); +} + +public class AlertService : IAlertService +{ + public Task ShowErrorAlertAsync(string title, string message, string cancel = "OK") + => Application.Current!.MainPage!.DisplayAlert(title, message, cancel); +} diff --git a/samples/todoapp/TodoApp.MAUI/Utils/IMVVMHelper.cs b/samples/todoapp/TodoApp.MAUI/Services/IMVVMHelper.cs similarity index 100% rename from samples/todoapp/TodoApp.MAUI/Utils/IMVVMHelper.cs rename to samples/todoapp/TodoApp.MAUI/Services/IMVVMHelper.cs diff --git a/samples/todoapp/TodoApp.MAUI/TodoApp.MAUI.csproj b/samples/todoapp/TodoApp.MAUI/TodoApp.MAUI.csproj index ef45db92..bde2871c 100644 --- a/samples/todoapp/TodoApp.MAUI/TodoApp.MAUI.csproj +++ b/samples/todoapp/TodoApp.MAUI/TodoApp.MAUI.csproj @@ -56,6 +56,12 @@ + + + + + + diff --git a/samples/todoapp/TodoApp.MAUI/Utils/ServicesContainer.cs b/samples/todoapp/TodoApp.MAUI/Utils/ServicesContainer.cs deleted file mode 100644 index d775e839..00000000 --- a/samples/todoapp/TodoApp.MAUI/Utils/ServicesContainer.cs +++ /dev/null @@ -1,33 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using Microsoft.Data.Sqlite; -using Microsoft.EntityFrameworkCore; -using TodoApp.MAUI.Models; -using TodoApp.MAUI.ViewModels; - -namespace TodoApp.MAUI.Utils; -internal static class ServicesContainer -{ - private static readonly Lazy dbConnection = new(() => new("Data Source=:memory:")); - private static readonly Lazy Services = new(() => CreateServiceProvider()); - - private static ServiceProvider CreateServiceProvider() - { - ServiceProvider serviceProvider = new ServiceCollection() - .AddTransient() - .AddScoped() - .AddDbContext(options => options.UseSqlite(dbConnection.Value)) - .BuildServiceProvider(); - - using IServiceScope scope = serviceProvider.CreateScope(); - IDbInitializer initializer = scope.ServiceProvider.GetRequiredService(); - initializer.Initialize(); - - return serviceProvider; - } - - public static TService GetRequiredService() where TService : notnull - => Services.Value.GetRequiredService(); -} diff --git a/samples/todoapp/TodoApp.MAUI/ViewModels/MainViewModel.cs b/samples/todoapp/TodoApp.MAUI/ViewModels/MainViewModel.cs index 03dd68c6..2f3ea0da 100644 --- a/samples/todoapp/TodoApp.MAUI/ViewModels/MainViewModel.cs +++ b/samples/todoapp/TodoApp.MAUI/ViewModels/MainViewModel.cs @@ -7,16 +7,14 @@ using System.ComponentModel; using System.Windows.Input; using TodoApp.MAUI.Models; -using TodoApp.MAUI.Utils; +using TodoApp.MAUI.Services; namespace TodoApp.MAUI.ViewModels; -public class MainViewModel(AppDbContext context) : INotifyPropertyChanged +public class MainViewModel(AppDbContext context, IAlertService alertService) : INotifyPropertyChanged { private bool _isRefreshing = false; - public IMVVMHelper? MvvmHelper { get; set; } - public ICommand AddItemCommand => new Command(async (Entry entry) => await AddItemAsync(entry.Text)); @@ -50,18 +48,15 @@ public async Task RefreshItemsAsync() { await context.SynchronizeAsync(); List items = await context.TodoItems.ToListAsync(); - await MvvmHelper!.RunOnUiThreadAsync(() => - { - Items.ReplaceAll(items); - }); + Items.ReplaceAll(items); } catch (Exception ex) { - await MvvmHelper!.DisplayErrorAlertAsync("RefreshItems", ex.Message); + await alertService.ShowErrorAlertAsync("RefreshItems", ex.Message); } finally { - await SetRefreshing(false); + IsRefreshing = false; } } @@ -80,7 +75,7 @@ public async Task UpdateItemAsync(string itemId, bool isComplete) } catch (Exception ex) { - await MvvmHelper!.DisplayErrorAlertAsync("UpdateItem", ex.Message); + await alertService.ShowErrorAlertAsync("UpdateItem", ex.Message); } } @@ -95,13 +90,10 @@ public async Task AddItemAsync(string text) } catch (Exception ex) { - await MvvmHelper!.DisplayErrorAlertAsync("AddItem", ex.Message); + await alertService.ShowErrorAlertAsync("AddItem", ex.Message); } } - private Task SetRefreshing(bool value) - => MvvmHelper!.RunOnUiThreadAsync(() => IsRefreshing = value); - #region INotifyPropertyChanged /// /// The event handler required by From 3d6e2a71f05bbfdcf632cbc28c9d6557fc733267 Mon Sep 17 00:00:00 2001 From: Adrian Hall Date: Fri, 30 Aug 2024 16:10:58 -0700 Subject: [PATCH 3/3] (#22) MAUI sample --- docs/content/samples/todoapp/maui.md | 72 +++ docs/content/samples/todoapp/winui3.md | 101 ++-- docs/public/404.html | 22 +- docs/public/categories/index.html | 41 +- docs/public/css/chroma-auto.css | 4 +- docs/public/css/format-print.css | 4 +- docs/public/css/print.css | 2 +- docs/public/css/swagger.css | 4 +- docs/public/css/theme-auto.css | 4 +- docs/public/css/variant.css | 2 +- docs/public/in-depth/client/index.html | 41 +- .../client/oneline-operations/index.html | 41 +- docs/public/in-depth/index.html | 41 +- .../server/databases/azuresql/index.html | 41 +- .../server/databases/cosmos/index.html | 41 +- .../server/databases/in-memory/index.html | 41 +- .../in-depth/server/databases/index.html | 41 +- .../in-depth/server/databases/index.xml | 2 +- .../server/databases/litedb/index.html | 41 +- .../server/databases/postgresql/index.html | 41 +- .../server/databases/sqlite/index.html | 551 ++++++++--------- docs/public/in-depth/server/index.html | 41 +- docs/public/index.html | 43 +- docs/public/samples/index.html | 43 +- docs/public/samples/server/index.html | 57 +- docs/public/samples/todoapp/index.html | 45 +- docs/public/samples/todoapp/index.xml | 11 +- docs/public/samples/todoapp/maui/index.html | 329 ++++++++++ docs/public/samples/todoapp/winui3/index.html | 208 +++---- docs/public/samples/todoapp/wpf/index.html | 571 +++++++++--------- docs/public/setup/client/index.html | 539 ++++++++--------- docs/public/setup/index.html | 41 +- docs/public/setup/index.xml | 2 +- docs/public/setup/server/index.html | 41 +- docs/public/sitemap.xml | 3 + docs/public/tags/index.html | 41 +- samples/todoapp/TodoApp.MAUI/MainPage.xaml.cs | 12 +- .../TodoApp.MAUI/Services/IMVVMHelper.cs | 12 - 38 files changed, 1810 insertions(+), 1407 deletions(-) create mode 100644 docs/content/samples/todoapp/maui.md create mode 100644 docs/public/samples/todoapp/maui/index.html delete mode 100644 samples/todoapp/TodoApp.MAUI/Services/IMVVMHelper.cs diff --git a/docs/content/samples/todoapp/maui.md b/docs/content/samples/todoapp/maui.md new file mode 100644 index 00000000..daa045cc --- /dev/null +++ b/docs/content/samples/todoapp/maui.md @@ -0,0 +1,72 @@ ++++ +title = "MAUI" ++++ + +## Run the application first + +The MAUI sample uses an in-memory Sqlite store for storing its data. To run the application locally: + +* [Configure Visual Studio for MAUI development](https://learn.microsoft.com/dotnet/maui/get-started/installation). +* Open `samples/todoapp/Samples.TodoApp.sln` in Visual Studio. +* In the Solution Explorer, right-click the `TodoApp.MAUI` project, then select **Set as Startup Project**. +* Select a target (in the top bar), then press F5 to run the application. + +The application runs on Android, iOS, and Windows. Each platform needs slightly different setup. Read the MAUI documentation for more information. + +## Deploy a datasync server to Azure + +Before you begin adjusting the application for offline usage, you must [deploy a datasync service](../server.md). Make a note of the URI of the service before continuing. + +## Update the application for datasync operations + +All the changes are isolated to the `Database/AppDbContext.cs` file. + +1. Change the definition of the class so that it inherits from `OfflineDbContext`: + + ```csharp + public class AppDbContext(DbContextOptions options) : OfflineDbContext(options) + { + // Rest of the class + } + ``` + +2. Add the `OnDatasyncInitialization()` method: + + ```csharp + protected override void OnDatasyncInitialization(DatasyncOfflineOptionsBuilder optionsBuilder) + { + HttpClientOptions clientOptions = new() + { + Endpoint = new Uri("https://YOURSITEHERE.azurewebsites.net/"), + HttpPipeline = [new LoggingHandler()] + }; + _ = optionsBuilder.UseHttpClientOptions(clientOptions); + } + ``` + + Replace the Endpoint with the URI of your datasync service. + +3. Update the `SynchronizeAsync()` method. + + The `SynchronizeAsync()` method is used by the application to synchronize data to and from the datasync service. It is called primarily from the `MainViewModel` which drives the UI interactions for the main list. + + ```csharp + public async Task SynchronizeAsync(CancellationToken cancellationToken = default) + { + PushResult pushResult = await this.PushAsync(cancellationToken); + if (!pushResult.IsSuccessful) + { + throw new ApplicationException($"Push failed: {pushResult.FailedRequests.FirstOrDefault().Value.ReasonPhrase}"); + } + + PullResult pullResult = await this.PullAsync(cancellationToken); + if (!pullResult.IsSuccessful) + { + throw new ApplicationException($"Pull failed: {pullResult.FailedRequests.FirstOrDefault().Value.ReasonPhrase}"); + } + } + ``` + +You can now re-run your application. Watch the console logs to show the interactions with the datasync service. Press the refresh button to synchronize data with the cloud. When you restart the application, your changes will automatically populate the database again. + +Obviously, you will want to do much more in a "real world" application, including proper error handling, authentication, and using a Sqlite file instead of an in-memory database. This example shows off the minimum required to add datasync services to an application. diff --git a/docs/content/samples/todoapp/winui3.md b/docs/content/samples/todoapp/winui3.md index 5945510f..a5933e8e 100644 --- a/docs/content/samples/todoapp/winui3.md +++ b/docs/content/samples/todoapp/winui3.md @@ -2,44 +2,71 @@ title = "WinUI3" +++ -You can find [our sample TodoApp for WinUI3](https://github.com/CommunityToolkit/Datasync/tree/main/samples/todoapp/TodoApp.WinUI3) on our GitHub repository. All of our logic has been placed in the `Database/AppDbContext.cs` file: - -{{< highlight lineNos="true" type="csharp" wrap="true" title="AppDbContext.cs" >}} -public class AppDbContext(DbContextOptions options) : OfflineDbContext(options) -{ - public DbSet TodoItems => Set(); - - protected override void OnDatasyncInitialization(DatasyncOfflineOptionsBuilder optionsBuilder) - { - HttpClientOptions clientOptions = new() - { - Endpoint = new Uri("https://YOURSITEHERE.azurewebsites.net/"), - HttpPipeline = [new LoggingHandler()] - }; - _ = optionsBuilder.UseHttpClientOptions(clientOptions); - } +## Run the application first - public async Task SynchronizeAsync(CancellationToken cancellationToken = default) - { - PushResult pushResult = await this.PushAsync(cancellationToken); - if (!pushResult.IsSuccessful) - { - throw new ApplicationException($"Push failed: {pushResult.FailedRequests.FirstOrDefault().Value.ReasonPhrase}"); - } - - PullResult pullResult = await this.PullAsync(cancellationToken); - if (!pullResult.IsSuccessful) - { - throw new ApplicationException($"Pull failed: {pullResult.FailedRequests.FirstOrDefault().Value.ReasonPhrase}"); - } - } -} -{{< /highlight >}} +The WinUI3 sample uses an in-memory Sqlite store for storing its data. To run the application locally: + +* [Configure Visual Studio for WinUI3 development](https://learn.microsoft.com/windows/apps/get-started/start-here). +* Open `samples/todoapp/Samples.TodoApp.sln` in Visual Studio. +* In the Solution Explorer, right-click the `TodoApp.WinUI3` project, then select **Set as Startup Project**. +* Select a target (in the top bar), then press F5 to run the application. + +If you bump into issues at this point, ensure you can properly develop and run WinUI3 applications outside of the datasync service. + +## Deploy a datasync server to Azure + +Before you begin adjusting the application for offline usage, you must [deploy a datasync service](../server.md). Make a note of the URI of the service before continuing. + +## Update the application for datasync operations + +All the changes are isolated to the `Database/AppDbContext.cs` file. + +1. Change the definition of the class so that it inherits from `OfflineDbContext`: -To enable offline synchronization: + ```csharp + public class AppDbContext(DbContextOptions options) : OfflineDbContext(options) + { + // Rest of the class + } + ``` + +2. Add the `OnDatasyncInitialization()` method: + + ```csharp + protected override void OnDatasyncInitialization(DatasyncOfflineOptionsBuilder optionsBuilder) + { + HttpClientOptions clientOptions = new() + { + Endpoint = new Uri("https://YOURSITEHERE.azurewebsites.net/"), + HttpPipeline = [new LoggingHandler()] + }; + _ = optionsBuilder.UseHttpClientOptions(clientOptions); + } + ``` + + Replace the Endpoint with the URI of your datasync service. + +3. Update the `SynchronizeAsync()` method. + + The `SynchronizeAsync()` method is used by the application to synchronize data to and from the datasync service. It is called primarily from the `MainViewModel` which drives the UI interactions for the main list. + + ```csharp + public async Task SynchronizeAsync(CancellationToken cancellationToken = default) + { + PushResult pushResult = await this.PushAsync(cancellationToken); + if (!pushResult.IsSuccessful) + { + throw new ApplicationException($"Push failed: {pushResult.FailedRequests.FirstOrDefault().Value.ReasonPhrase}"); + } + + PullResult pullResult = await this.PullAsync(cancellationToken); + if (!pullResult.IsSuccessful) + { + throw new ApplicationException($"Pull failed: {pullResult.FailedRequests.FirstOrDefault().Value.ReasonPhrase}"); + } + } + ``` -* Switch from `DbContext` to `OfflineDbContext`. -* Define your `OnDatasyncInitialization()` method (don't forget to change the URL to the URL of your datasync server). -* Where appropriate, use `PushAsync()` and `PullAsync()` to communicate with the server. +You can now re-run your application. Watch the console logs to show the interactions with the datasync service. Press the refresh button to synchronize data with the cloud. When you restart the application, your changes will automatically populate the database again. -We have placed a `SynchronizeAsync()` method on the database context, which is used in the view model for the single page we have. +Obviously, you will want to do much more in a "real world" application, including proper error handling, authentication, and using a Sqlite file instead of an in-memory database. This example shows off the minimum required to add datasync services to an application. diff --git a/docs/public/404.html b/docs/public/404.html index 2bd59099..8f8eea61 100644 --- a/docs/public/404.html +++ b/docs/public/404.html @@ -20,17 +20,17 @@ - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - + + + diff --git a/docs/public/css/chroma-auto.css b/docs/public/css/chroma-auto.css index bd1ea423..c2945061 100644 --- a/docs/public/css/chroma-auto.css +++ b/docs/public/css/chroma-auto.css @@ -1,2 +1,2 @@ -@import "chroma-relearn-light.css?1724869793" screen and (prefers-color-scheme: light); -@import "chroma-relearn-dark.css?1724869793" screen and (prefers-color-scheme: dark); +@import "chroma-relearn-light.css?1725059400" screen and (prefers-color-scheme: light); +@import "chroma-relearn-dark.css?1725059400" screen and (prefers-color-scheme: dark); diff --git a/docs/public/css/format-print.css b/docs/public/css/format-print.css index 69881690..f8c539de 100644 --- a/docs/public/css/format-print.css +++ b/docs/public/css/format-print.css @@ -1,5 +1,5 @@ -@import "theme-relearn-light.css?1724869793"; -@import "chroma-relearn-light.css?1724869793"; +@import "theme-relearn-light.css?1725059400"; +@import "chroma-relearn-light.css?1725059400"; #R-sidebar { display: none; diff --git a/docs/public/css/print.css b/docs/public/css/print.css index 4b50f26a..8bca50bc 100644 --- a/docs/public/css/print.css +++ b/docs/public/css/print.css @@ -1 +1 @@ -@import "format-print.css?1724869793"; +@import "format-print.css?1725059400"; diff --git a/docs/public/css/swagger.css b/docs/public/css/swagger.css index 9cdc3eb8..14169e77 100644 --- a/docs/public/css/swagger.css +++ b/docs/public/css/swagger.css @@ -1,7 +1,7 @@ /* Styles to make Swagger-UI fit into our theme */ -@import "fonts.css?1724869793"; -@import "variables.css?1724869793"; +@import "fonts.css?1725059400"; +@import "variables.css?1725059400"; body{ line-height: 1.574; diff --git a/docs/public/css/theme-auto.css b/docs/public/css/theme-auto.css index e7b44e9b..9e78840b 100644 --- a/docs/public/css/theme-auto.css +++ b/docs/public/css/theme-auto.css @@ -1,2 +1,2 @@ -@import "theme-relearn-light.css?1724869793" screen and (prefers-color-scheme: light); -@import "theme-relearn-dark.css?1724869793" screen and (prefers-color-scheme: dark); +@import "theme-relearn-light.css?1725059400" screen and (prefers-color-scheme: light); +@import "theme-relearn-dark.css?1725059400" screen and (prefers-color-scheme: dark); diff --git a/docs/public/css/variant.css b/docs/public/css/variant.css index 2d309e38..a5e85c51 100644 --- a/docs/public/css/variant.css +++ b/docs/public/css/variant.css @@ -1,4 +1,4 @@ -@import "variables.css?1724869793"; +@import "variables.css?1725059400"; html { color-scheme: only var(--INTERNAL-BROWSER-theme); diff --git a/docs/public/in-depth/client/index.html b/docs/public/in-depth/client/index.html index fc3a69b2..d2d19758 100644 --- a/docs/public/in-depth/client/index.html +++ b/docs/public/in-depth/client/index.html @@ -36,17 +36,17 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - + + + diff --git a/docs/public/in-depth/client/oneline-operations/index.html b/docs/public/in-depth/client/oneline-operations/index.html index cdffd709..6fe19909 100644 --- a/docs/public/in-depth/client/oneline-operations/index.html +++ b/docs/public/in-depth/client/oneline-operations/index.html @@ -28,17 +28,17 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - + + + diff --git a/docs/public/in-depth/index.html b/docs/public/in-depth/index.html index 6275cf98..8fa2dad6 100644 --- a/docs/public/in-depth/index.html +++ b/docs/public/in-depth/index.html @@ -32,17 +32,17 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - + + + diff --git a/docs/public/in-depth/server/databases/azuresql/index.html b/docs/public/in-depth/server/databases/azuresql/index.html index 97905a7a..00e2cab4 100644 --- a/docs/public/in-depth/server/databases/azuresql/index.html +++ b/docs/public/in-depth/server/databases/azuresql/index.html @@ -32,17 +32,17 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - + + + diff --git a/docs/public/in-depth/server/databases/cosmos/index.html b/docs/public/in-depth/server/databases/cosmos/index.html index b1e7ec0c..668a1215 100644 --- a/docs/public/in-depth/server/databases/cosmos/index.html +++ b/docs/public/in-depth/server/databases/cosmos/index.html @@ -28,17 +28,17 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - + + + diff --git a/docs/public/in-depth/server/databases/in-memory/index.html b/docs/public/in-depth/server/databases/in-memory/index.html index c79fbc14..4cb42394 100644 --- a/docs/public/in-depth/server/databases/in-memory/index.html +++ b/docs/public/in-depth/server/databases/in-memory/index.html @@ -32,17 +32,17 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - + + + diff --git a/docs/public/in-depth/server/databases/index.html b/docs/public/in-depth/server/databases/index.html index 88593c43..b4852356 100644 --- a/docs/public/in-depth/server/databases/index.html +++ b/docs/public/in-depth/server/databases/index.html @@ -32,17 +32,17 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - + + + diff --git a/docs/public/in-depth/server/databases/index.xml b/docs/public/in-depth/server/databases/index.xml index 54179e76..d941f78f 100644 --- a/docs/public/in-depth/server/databases/index.xml +++ b/docs/public/in-depth/server/databases/index.xml @@ -47,7 +47,7 @@ http://localhost:1313/Datasync/in-depth/server/databases/sqlite/index.html Mon, 01 Jan 0001 00:00:00 +0000 http://localhost:1313/Datasync/in-depth/server/databases/sqlite/index.html - SqLite Warning Do not use SqLite for production services. SqLite is only suitable for client-side usage in production. SqLite doesn’t have a date/time field that supports millisecond accuracy. As such, it isn’t suitable for anything except for testing. If you wish to use SqLite, ensure you implement a value converter and value comparer on each model for date/time properties. The easiest method to implement value converters and comparers is in the OnModelCreating(ModelBuilder) method of your DbContext: + SqLite Warning Do not use SqLite for production services. SqLite is only suitable for client-side usage in production. SqLite doesn’t have a date/time field that supports millisecond accuracy. As such, it isn’t suitable for anything except for testing. If you wish to use SqLite, ensure you implement a value converter and value comparer on each model for date/time properties. The easiest method to implement value converters and comparers is in the OnModelCreating(ModelBuilder) method of your DbContext: \ No newline at end of file diff --git a/docs/public/in-depth/server/databases/litedb/index.html b/docs/public/in-depth/server/databases/litedb/index.html index 5e546c46..09a9009f 100644 --- a/docs/public/in-depth/server/databases/litedb/index.html +++ b/docs/public/in-depth/server/databases/litedb/index.html @@ -40,17 +40,17 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - + + + diff --git a/docs/public/in-depth/server/databases/postgresql/index.html b/docs/public/in-depth/server/databases/postgresql/index.html index 2cfe1933..b0dd6d01 100644 --- a/docs/public/in-depth/server/databases/postgresql/index.html +++ b/docs/public/in-depth/server/databases/postgresql/index.html @@ -32,17 +32,17 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - + + + diff --git a/docs/public/in-depth/server/databases/sqlite/index.html b/docs/public/in-depth/server/databases/sqlite/index.html index 847dd6b1..cc03b514 100644 --- a/docs/public/in-depth/server/databases/sqlite/index.html +++ b/docs/public/in-depth/server/databases/sqlite/index.html @@ -1,124 +1,124 @@ - - - - - - - - - - - - - - - - - - - - - - - Sqlite :: Datasync Community Toolkit - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
-
- -

Sqlite

- +
+
+ + + + + +
+
+
+
+
+
+ +

Sqlite

+

SqLite

- -
-
Warning
-
- + +
+
Warning
+
+

Do not use SqLite for production services. SqLite is only suitable for client-side usage in production.

-
+

SqLite doesn’t have a date/time field that supports millisecond accuracy. As such, it isn’t suitable for anything except for testing. If you wish to use SqLite, ensure you implement a value converter and value comparer on each model for date/time properties. The easiest method to implement value converters and comparers is in the OnModelCreating(ModelBuilder) method of your DbContext:

protected override void OnModelCreating(ModelBuilder builder)
 {
@@ -162,165 +162,166 @@ 

SqLite

InstallUpdateTriggers(context); } context.Database.SaveChanges(); -}
-
-
-
-
-
- - - - - - - +} +
+
+ + + + + + + + + + diff --git a/docs/public/in-depth/server/index.html b/docs/public/in-depth/server/index.html index 13ae131b..6e601f0c 100644 --- a/docs/public/in-depth/server/index.html +++ b/docs/public/in-depth/server/index.html @@ -32,17 +32,17 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - + + + diff --git a/docs/public/index.html b/docs/public/index.html index 96085fc2..2107aae6 100644 --- a/docs/public/index.html +++ b/docs/public/index.html @@ -24,17 +24,17 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - + + + diff --git a/docs/public/samples/index.html b/docs/public/samples/index.html index 71eb8e23..4e74904f 100644 --- a/docs/public/samples/index.html +++ b/docs/public/samples/index.html @@ -36,17 +36,17 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - + + + diff --git a/docs/public/samples/server/index.html b/docs/public/samples/server/index.html index b7f84bb1..fb0978e0 100644 --- a/docs/public/samples/server/index.html +++ b/docs/public/samples/server/index.html @@ -36,17 +36,17 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - + + + diff --git a/docs/public/samples/todoapp/index.html b/docs/public/samples/todoapp/index.html index 9aa49973..88a359e2 100644 --- a/docs/public/samples/todoapp/index.html +++ b/docs/public/samples/todoapp/index.html @@ -28,17 +28,17 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - + + + diff --git a/docs/public/samples/todoapp/index.xml b/docs/public/samples/todoapp/index.xml index 5fbbfa4b..a6a2fea4 100644 --- a/docs/public/samples/todoapp/index.xml +++ b/docs/public/samples/todoapp/index.xml @@ -7,19 +7,26 @@ Hugo en-us + + MAUI + http://localhost:1313/Datasync/samples/todoapp/maui/index.html + Mon, 01 Jan 0001 00:00:00 +0000 + http://localhost:1313/Datasync/samples/todoapp/maui/index.html + Run the application first The MAUI sample uses an in-memory Sqlite store for storing its data. To run the application locally: Configure Visual Studio for MAUI development. Open samples/todoapp/Samples.TodoApp.sln in Visual Studio. In the Solution Explorer, right-click the TodoApp.MAUI project, then select Set as Startup Project. Select a target (in the top bar), then press F5 to run the application. The application runs on Android, iOS, and Windows. Each platform needs slightly different setup. + WinUI3 http://localhost:1313/Datasync/samples/todoapp/winui3/index.html Mon, 01 Jan 0001 00:00:00 +0000 http://localhost:1313/Datasync/samples/todoapp/winui3/index.html - You can find our sample TodoApp for WinUI3 on our GitHub repository. All of our logic has been placed in the Database/AppDbContext.cs file: ​ AppDbContext.cs 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 public class AppDbContext(DbContextOptions<AppDbContext> options) : OfflineDbContext(options) { public DbSet<TodoItem> TodoItems => Set<TodoItem>(); protected override void OnDatasyncInitialization(DatasyncOfflineOptionsBuilder optionsBuilder) { HttpClientOptions clientOptions = new() { Endpoint = new Uri("https://YOURSITEHERE. + Run the application first The WinUI3 sample uses an in-memory Sqlite store for storing its data. To run the application locally: Configure Visual Studio for WinUI3 development. Open samples/todoapp/Samples.TodoApp.sln in Visual Studio. In the Solution Explorer, right-click the TodoApp.WinUI3 project, then select Set as Startup Project. Select a target (in the top bar), then press F5 to run the application. If you bump into issues at this point, ensure you can properly develop and run WinUI3 applications outside of the datasync service. WPF http://localhost:1313/Datasync/samples/todoapp/wpf/index.html Mon, 01 Jan 0001 00:00:00 +0000 http://localhost:1313/Datasync/samples/todoapp/wpf/index.html - You can find our sample TodoApp for WPF on our GitHub repository. All of our logic has been placed in the Database/AppDbContext.cs file: ​ AppDbContext.cs 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 public class AppDbContext(DbContextOptions<AppDbContext> options) : OfflineDbContext(options) { public DbSet<TodoItem> TodoItems => Set<TodoItem>(); protected override void OnDatasyncInitialization(DatasyncOfflineOptionsBuilder optionsBuilder) { HttpClientOptions clientOptions = new() { Endpoint = new Uri("https://YOURSITEHERE. + You can find our sample TodoApp for WPF on our GitHub repository. All of our logic has been placed in the Database/AppDbContext.cs file: ​ AppDbContext.cs 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 public class AppDbContext(DbContextOptions<AppDbContext> options) : OfflineDbContext(options) { public DbSet<TodoItem> TodoItems => Set<TodoItem>(); protected override void OnDatasyncInitialization(DatasyncOfflineOptionsBuilder optionsBuilder) { HttpClientOptions clientOptions = new() { Endpoint = new Uri("https://YOURSITEHERE. \ No newline at end of file diff --git a/docs/public/samples/todoapp/maui/index.html b/docs/public/samples/todoapp/maui/index.html new file mode 100644 index 00000000..db6dc479 --- /dev/null +++ b/docs/public/samples/todoapp/maui/index.html @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + MAUI :: Datasync Community Toolkit + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+
+ +

MAUI

+ +

Run the application first

+

The MAUI sample uses an in-memory Sqlite store for storing its data. To run the application locally:

+
    +
  • Configure Visual Studio for MAUI development.
  • +
  • Open samples/todoapp/Samples.TodoApp.sln in Visual Studio.
  • +
  • In the Solution Explorer, right-click the TodoApp.MAUI project, then select Set as Startup Project.
  • +
  • Select a target (in the top bar), then press F5 to run the application.
  • +
+

The application runs on Android, iOS, and Windows. Each platform needs slightly different setup. Read the MAUI documentation for more information.

+

Deploy a datasync server to Azure

+

Before you begin adjusting the application for offline usage, you must deploy a datasync service. Make a note of the URI of the service before continuing.

+

Update the application for datasync operations

+

All the changes are isolated to the Database/AppDbContext.cs file.

+
    +
  1. +

    Change the definition of the class so that it inherits from OfflineDbContext:

    +
    public class AppDbContext(DbContextOptions<AppDbContext> options) : OfflineDbContext(options)
    +{
    +  // Rest of the class
    +}
  2. +
  3. +

    Add the OnDatasyncInitialization() method:

    +
    protected override void OnDatasyncInitialization(DatasyncOfflineOptionsBuilder optionsBuilder)
    +{
    +    HttpClientOptions clientOptions = new()
    +    {
    +        Endpoint = new Uri("https://YOURSITEHERE.azurewebsites.net/"),
    +        HttpPipeline = [new LoggingHandler()]
    +    };
    +    _ = optionsBuilder.UseHttpClientOptions(clientOptions);
    +}

    Replace the Endpoint with the URI of your datasync service.

    +
  4. +
  5. +

    Update the SynchronizeAsync() method.

    +

    The SynchronizeAsync() method is used by the application to synchronize data to and from the datasync service. It is called primarily from the MainViewModel which drives the UI interactions for the main list.

    +
    public async Task SynchronizeAsync(CancellationToken cancellationToken = default)
    +{
    +   PushResult pushResult = await this.PushAsync(cancellationToken);
    +   if (!pushResult.IsSuccessful)
    +   {
    +     throw new ApplicationException($"Push failed: {pushResult.FailedRequests.FirstOrDefault().Value.ReasonPhrase}");
    +   }
    +
    +   PullResult pullResult = await this.PullAsync(cancellationToken);
    +   if (!pullResult.IsSuccessful)
    +   {
    +     throw new ApplicationException($"Pull failed: {pullResult.FailedRequests.FirstOrDefault().Value.ReasonPhrase}");
    +   }
    + }
  6. +
+

You can now re-run your application. Watch the console logs to show the interactions with the datasync service. Press the refresh button to synchronize data with the cloud. When you restart the application, your changes will automatically populate the database again.

+

Obviously, you will want to do much more in a “real world” application, including proper error handling, authentication, and using a Sqlite file instead of an in-memory database. This example shows off the minimum required to add datasync services to an application.

+ +
+
+
+
+
+
+ + + + + + diff --git a/docs/public/samples/todoapp/winui3/index.html b/docs/public/samples/todoapp/winui3/index.html index 28595956..69e627f5 100644 --- a/docs/public/samples/todoapp/winui3/index.html +++ b/docs/public/samples/todoapp/winui3/index.html @@ -5,40 +5,40 @@ - + - + - + - - + + WinUI3 :: Datasync Community Toolkit - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - + + + diff --git a/docs/public/samples/todoapp/wpf/index.html b/docs/public/samples/todoapp/wpf/index.html index f203e55a..970096cd 100644 --- a/docs/public/samples/todoapp/wpf/index.html +++ b/docs/public/samples/todoapp/wpf/index.html @@ -1,130 +1,130 @@ - - - - - - - + + + + + + + - - - +​ AppDbContext.cs 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 public class AppDbContext(DbContextOptions<AppDbContext> options) : OfflineDbContext(options) { public DbSet<TodoItem> TodoItems => Set<TodoItem>(); protected override void OnDatasyncInitialization(DatasyncOfflineOptionsBuilder optionsBuilder) { HttpClientOptions clientOptions = new() { Endpoint = new Uri("https://YOURSITEHERE."> + + + - - - +​ AppDbContext.cs 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 public class AppDbContext(DbContextOptions<AppDbContext> options) : OfflineDbContext(options) { public DbSet<TodoItem> TodoItems => Set<TodoItem>(); protected override void OnDatasyncInitialization(DatasyncOfflineOptionsBuilder optionsBuilder) { HttpClientOptions clientOptions = new() { Endpoint = new Uri("https://YOURSITEHERE."> + + + - - - - +​ AppDbContext.cs 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 public class AppDbContext(DbContextOptions<AppDbContext> options) : OfflineDbContext(options) { public DbSet<TodoItem> TodoItems => Set<TodoItem>(); protected override void OnDatasyncInitialization(DatasyncOfflineOptionsBuilder optionsBuilder) { HttpClientOptions clientOptions = new() { Endpoint = new Uri("https://YOURSITEHERE."> + + + + - - WPF :: Datasync Community Toolkit - - - - - - - - - - - - - - - - - -
-
- +
+
+
+
+
+
+ +

WPF

+

You can find our sample TodoApp for WPF on our GitHub repository. All of our logic has been placed in the Database/AppDbContext.cs file:

- -
-
-
- -
-
-
-
- + +
+
+
+ +
+
+
+
+
 1
@@ -188,9 +188,9 @@ 

WPF

} }
-
-
-
+
+
+

To enable offline synchronization:

    @@ -199,165 +199,166 @@

    WPF

  • Where appropriate, use PushAsync() and PullAsync() to communicate with the server.

We have placed a SynchronizeAsync() method on the database context, which is used in the view model for the single page we have.

- -
-
-
-
-
-
- - - - - - + +
+
+ + + + + + + + + + diff --git a/docs/public/setup/client/index.html b/docs/public/setup/client/index.html index 12246952..b18e35d6 100644 --- a/docs/public/setup/client/index.html +++ b/docs/public/setup/client/index.html @@ -1,79 +1,79 @@ - - - - - - - + + + + + + + - - - +Note Sqlite stores DateTimeOffset using a second accuracy by default."> + + + - - - +Note Sqlite stores DateTimeOffset using a second accuracy by default."> + + + - - - - +Note Sqlite stores DateTimeOffset using a second accuracy by default."> + + + + - - Client application :: Datasync Community Toolkit - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
-
- -

Client application

- +
+
+ + + + + +
+
+
+
+
+
+ +

Client application

+

Prerequisites

For offline database access, you should create your application using Entity Framework Core v8.0 and a Sqlite database. When you construct your models for database storage, ensure they are constructed with the following requirements:

    @@ -126,13 +126,13 @@

    Prerequisites

  • Deleted - a bool field.

These are maintained by the server.

- -
-
Note
-
- + +
+
Note
+
+

Sqlite stores DateTimeOffset using a second accuracy by default. The Datasync Community Toolkit does not rely on the storage of the UpdatedAt field, but it is transmitted with millisecond accuracy. Consider using a ValueConverter to store the value as a long value instead.

-
+

Setup

Add the CommunityToolkit.Datasync.Client NuGet package to your application.

Change your DbContext to an OfflineDbContext

@@ -155,165 +155,166 @@

Create an OnDatasyncIni { throw new ApplicationException($"Pull failed: {pullResult.FailedRequests.FirstOrDefault().Value.ReasonPhrase}"); }

You should always push changes before pulling updated records from the remote service.

- -
-
-
-
-
- - - - - - - + +
+
+ + + + + + + + + + diff --git a/docs/public/setup/index.html b/docs/public/setup/index.html index c76d85b7..b0e20f32 100644 --- a/docs/public/setup/index.html +++ b/docs/public/setup/index.html @@ -20,17 +20,17 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - + + + diff --git a/docs/public/setup/index.xml b/docs/public/setup/index.xml index 654576fc..45c16c40 100644 --- a/docs/public/setup/index.xml +++ b/docs/public/setup/index.xml @@ -19,7 +19,7 @@ http://localhost:1313/Datasync/setup/client/index.html Mon, 01 Jan 0001 00:00:00 +0000 http://localhost:1313/Datasync/setup/client/index.html - Prerequisites For offline database access, you should create your application using Entity Framework Core v8.0 and a Sqlite database. When you construct your models for database storage, ensure they are constructed with the following requirements: Primary key - Id, a string field. UpdatedAt - a DateTimeOffset? field. Version - a string? or byte[]? field. Deleted - a bool field. These are maintained by the server. Note Sqlite stores DateTimeOffset using a second accuracy by default. + Prerequisites For offline database access, you should create your application using Entity Framework Core v8.0 and a Sqlite database. When you construct your models for database storage, ensure they are constructed with the following requirements: Primary key - Id, a string field. UpdatedAt - a DateTimeOffset? field. Version - a string? or byte[]? field. Deleted - a bool field. These are maintained by the server. Note Sqlite stores DateTimeOffset using a second accuracy by default. \ No newline at end of file diff --git a/docs/public/setup/server/index.html b/docs/public/setup/server/index.html index b43fc6c7..0013d41e 100644 --- a/docs/public/setup/server/index.html +++ b/docs/public/setup/server/index.html @@ -36,17 +36,17 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - + + + diff --git a/docs/public/sitemap.xml b/docs/public/sitemap.xml index d45ebf81..197feb00 100644 --- a/docs/public/sitemap.xml +++ b/docs/public/sitemap.xml @@ -45,6 +45,9 @@ http://localhost:1313/Datasync/in-depth/server/databases/litedb/index.html + + http://localhost:1313/Datasync/samples/todoapp/maui/index.html + http://localhost:1313/Datasync/in-depth/server/databases/postgresql/index.html diff --git a/docs/public/tags/index.html b/docs/public/tags/index.html index 044ad76b..e20a44f2 100644 --- a/docs/public/tags/index.html +++ b/docs/public/tags/index.html @@ -20,17 +20,17 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - + + + diff --git a/samples/todoapp/TodoApp.MAUI/MainPage.xaml.cs b/samples/todoapp/TodoApp.MAUI/MainPage.xaml.cs index 46ddb5e5..e6a84b10 100644 --- a/samples/todoapp/TodoApp.MAUI/MainPage.xaml.cs +++ b/samples/todoapp/TodoApp.MAUI/MainPage.xaml.cs @@ -4,12 +4,11 @@ using System.Diagnostics; using TodoApp.MAUI.Models; -using TodoApp.MAUI.Utils; using TodoApp.MAUI.ViewModels; namespace TodoApp.MAUI; -public partial class MainPage : ContentPage, IMVVMHelper +public partial class MainPage : ContentPage { private readonly MainViewModel _viewModel; @@ -17,7 +16,6 @@ public MainPage() { InitializeComponent(); this._viewModel = App.GetRequiredService(); - //this._viewModel.MvvmHelper = this; BindingContext = this._viewModel; } @@ -40,13 +38,5 @@ public void OnListItemTapped(object sender, ItemTappedEventArgs e) itemList.SelectedItem = null; } } - - #region IMVVMHelper - public Task RunOnUiThreadAsync(Action func) - => MainThread.InvokeOnMainThreadAsync(func); - - public Task DisplayErrorAlertAsync(string title, string message) - => RunOnUiThreadAsync(async () => await DisplayAlert(title, message, "OK")); - #endregion } diff --git a/samples/todoapp/TodoApp.MAUI/Services/IMVVMHelper.cs b/samples/todoapp/TodoApp.MAUI/Services/IMVVMHelper.cs deleted file mode 100644 index 0ba9f470..00000000 --- a/samples/todoapp/TodoApp.MAUI/Services/IMVVMHelper.cs +++ /dev/null @@ -1,12 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -namespace TodoApp.MAUI.Utils; - -public interface IMVVMHelper -{ - Task RunOnUiThreadAsync(Action func); - - Task DisplayErrorAlertAsync(string title, string message); -} \ No newline at end of file