diff --git a/Directory.Packages.props b/Directory.Packages.props new file mode 100644 index 0000000..5d3da4a --- /dev/null +++ b/Directory.Packages.props @@ -0,0 +1,16 @@ + + + + true + + + + + + + + + + + + \ No newline at end of file diff --git a/Outlookish.sln b/Outlookish.sln index 8622348..ee42685 100644 --- a/Outlookish.sln +++ b/Outlookish.sln @@ -21,10 +21,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution ProjectSection(SolutionItems) = preProject .editorconfig = .editorconfig CodeMaid.config = CodeMaid.config + Directory.Packages.props = Directory.Packages.props readme.md = readme.md EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleApp.Services", "SampleApp.Services\SampleApp.Services.csproj", "{1AFDDD2F-2AF5-4BF3-AE04-89A23B2991D3}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SampleApp.Services", "SampleApp.Services\SampleApp.Services.csproj", "{1AFDDD2F-2AF5-4BF3-AE04-89A23B2991D3}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/SampleApp.Services/SampleApp.Services.csproj b/SampleApp.Services/SampleApp.Services.csproj index 23fe4a7..ff8a1be 100644 --- a/SampleApp.Services/SampleApp.Services.csproj +++ b/SampleApp.Services/SampleApp.Services.csproj @@ -1,7 +1,7 @@ - net6.0 + net9.0 enable enable diff --git a/readme.md b/readme.md index 0e64cc6..41536b8 100644 --- a/readme.md +++ b/readme.md @@ -220,15 +220,19 @@ where T : AppBuilderBase, new() } ``` -The same way the avalonia framework gives us the possibility to use specific UI mechanism based on the detected platform. +The same way the Avalonia framework allows us to use specific UI mechanisms based on the detected platform. -## Future Considerations +## Upcoming Releases + +* Upgrade to Avalonia v11.1 with Prism v9.0-pre + +### Future Considerations * Demonstrate page navigation with parameters - _use a `MockEmails` class to pass in EmailId and `OnNavigatedTo()` get email from `MailService`_ * Include successful navigation * Include failed navigation (i.e. invalid EmailId) * Use Prism's 'Navigation Journaling -* Populate footer using Prism Events +* Populate the footer using Prism Events * Add icon glyphs via Styles * Sidebar Panel - Simple sidebar with stages * Flyout menu - Alternative sidebar using Grids diff --git a/source/SampleApp.Common/SampleApp.Common.csproj b/source/SampleApp.Common/SampleApp.Common.csproj index 7dd0a84..5c21f67 100644 --- a/source/SampleApp.Common/SampleApp.Common.csproj +++ b/source/SampleApp.Common/SampleApp.Common.csproj @@ -1,15 +1,15 @@ - net6.0 + net9.0 ..\..\output - - - - + + + + diff --git a/source/SampleApp.Common/TabControlAdapter.cs b/source/SampleApp.Common/TabControlAdapter.cs index 02c9187..d48e637 100644 --- a/source/SampleApp.Common/TabControlAdapter.cs +++ b/source/SampleApp.Common/TabControlAdapter.cs @@ -2,7 +2,7 @@ using System.Collections.Specialized; using System.Linq; using Avalonia.Controls; -using Prism.Regions; +using Prism.Navigation.Regions; namespace SampleApp.Common; @@ -57,10 +57,12 @@ protected override void Adapt(IRegion region, TabControl regionTarget) { foreach (UserControl item in e.NewItems) { - var items = regionTarget.Items.Cast().ToList(); - items.Add(new TabItem { Header = item.Tag, Content = item }); - regionTarget.Items = items; // Avalonia v0.10.x - //// regionTarget.Items.Set(items); // Avalonia v11 + //var items = regionTarget.Items.Cast().ToList(); + // items.Add(new TabItem { Header = item.Tag, Content = item }); + // regionTarget.Items = items; // Avalonia v0.10.x + regionTarget.Items.Add(new TabItem { Header = item.Tag, Content = item }); + + //regionTarget.ItemsSource = items; // Avalonia v11.0 } } else if (e.Action == NotifyCollectionChangedAction.Remove) @@ -68,12 +70,13 @@ protected override void Adapt(IRegion region, TabControl regionTarget) foreach (UserControl item in e.OldItems) { var tabToDelete = regionTarget.Items.OfType().FirstOrDefault(n => n.Content == item); - // regionTarget.Items.Remove(tabToDelete); // WPF - var items = regionTarget.Items.Cast().ToList(); - items.Remove(tabToDelete); - regionTarget.Items = items; - //// regionTarget.Items.Set(items); // Avalonia v11 + regionTarget.Items.Remove(tabToDelete); + // regionTarget.Items.Remove(tabToDelete); // WPF + //var items = regionTarget.Items.Cast().ToList(); + // items.Remove(tabToDelete); + // regionTarget.Items = items; // Avalonia v0.10 + //regionTarget.ItemsSource = items; // Avalonia v11 } } }; diff --git a/source/SampleApp.Common/ViewModelBase.cs b/source/SampleApp.Common/ViewModelBase.cs index 3c9f7ec..fe6d01b 100644 --- a/source/SampleApp.Common/ViewModelBase.cs +++ b/source/SampleApp.Common/ViewModelBase.cs @@ -1,5 +1,5 @@ using Prism.Mvvm; -using Prism.Regions; +using Prism.Navigation.Regions; namespace SampleApp.Common { diff --git a/source/SampleApp.Main/App.axaml b/source/SampleApp.Main/App.axaml index fbc31a6..a9b7285 100644 --- a/source/SampleApp.Main/App.axaml +++ b/source/SampleApp.Main/App.axaml @@ -1,11 +1,11 @@ - + - - - - - + + + + + diff --git a/source/SampleApp.Main/App.axaml.cs b/source/SampleApp.Main/App.axaml.cs index d939603..7c2be85 100644 --- a/source/SampleApp.Main/App.axaml.cs +++ b/source/SampleApp.Main/App.axaml.cs @@ -1,9 +1,9 @@ -using Avalonia; +using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; using Prism.Ioc; using Prism.Modularity; -using Prism.Regions; +using Prism.Navigation.Regions; using Prism.DryIoc; using SampleApp.Common; using SampleApp.Main.Core.RegionAdapters; @@ -45,7 +45,7 @@ protected override void ConfigureRegionAdapterMappings(RegionAdapterMappings reg regionAdapterMappings.RegisterMapping(typeof(TabControl), Container.Resolve()); } - protected override IAvaloniaObject CreateShell() + protected override AvaloniaObject CreateShell() { return this.Container.Resolve(); } @@ -75,4 +75,4 @@ protected override void RegisterTypes(IContainerRegistry containerRegistry) containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); } -} \ No newline at end of file +} diff --git a/source/SampleApp.Main/Core/RegionAdapters/GridRegionAdapter.cs b/source/SampleApp.Main/Core/RegionAdapters/GridRegionAdapter.cs index 4c80819..f265c32 100644 --- a/source/SampleApp.Main/Core/RegionAdapters/GridRegionAdapter.cs +++ b/source/SampleApp.Main/Core/RegionAdapters/GridRegionAdapter.cs @@ -1,5 +1,5 @@ -using Avalonia.Controls; -using Prism.Regions; +using Avalonia.Controls; +using Prism.Navigation.Regions; namespace SampleApp.Main.Core.RegionAdapters { @@ -16,14 +16,15 @@ protected override void Adapt(IRegion region, Grid regionTarget) { if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add) { - foreach (IControl item in e.NewItems) + foreach (Control item in e.NewItems) { regionTarget.Children.Add(item); } } + if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove) { - foreach (IControl item in e.OldItems) + foreach (Control item in e.OldItems) { regionTarget.Children.Remove(item); } @@ -33,4 +34,4 @@ protected override void Adapt(IRegion region, Grid regionTarget) protected override IRegion CreateRegion() => new SingleActiveRegion() { }; } -} \ No newline at end of file +} diff --git a/source/SampleApp.Main/Core/RegionAdapters/StackPanelRegionAdapter.cs b/source/SampleApp.Main/Core/RegionAdapters/StackPanelRegionAdapter.cs index 6e5eb7c..c584ff8 100644 --- a/source/SampleApp.Main/Core/RegionAdapters/StackPanelRegionAdapter.cs +++ b/source/SampleApp.Main/Core/RegionAdapters/StackPanelRegionAdapter.cs @@ -1,5 +1,5 @@ -using Avalonia.Controls; -using Prism.Regions; +using Avalonia.Controls; +using Prism.Navigation.Regions; namespace SampleApp.Main.Core.RegionAdapters { @@ -16,7 +16,7 @@ protected override void Adapt(IRegion region, StackPanel regionTarget) { if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add) { - foreach (IControl item in e.NewItems) + foreach (Control item in e.NewItems) { if (e.NewItems != null) regionTarget.Children.Add(item); @@ -25,7 +25,7 @@ protected override void Adapt(IRegion region, StackPanel regionTarget) if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove) { - foreach (IControl item in e.OldItems) + foreach (Control item in e.OldItems) { if (e.OldItems != null) regionTarget.Children.Remove(item); @@ -36,4 +36,4 @@ protected override void Adapt(IRegion region, StackPanel regionTarget) protected override IRegion CreateRegion() => new SingleActiveRegion() { }; } -} \ No newline at end of file +} diff --git a/source/SampleApp.Main/Modules/SampleFooter/SampleFooterModule.cs b/source/SampleApp.Main/Modules/SampleFooter/SampleFooterModule.cs index 6e41155..67f212d 100644 --- a/source/SampleApp.Main/Modules/SampleFooter/SampleFooterModule.cs +++ b/source/SampleApp.Main/Modules/SampleFooter/SampleFooterModule.cs @@ -1,6 +1,6 @@ using Prism.Ioc; using Prism.Modularity; -using Prism.Regions; +using Prism.Navigation.Regions; using SampleApp.Common; using SampleApp.Modules.SampleFooter.ViewModels; using SampleApp.Modules.SampleFooter.Views; diff --git a/source/SampleApp.Main/Program.cs b/source/SampleApp.Main/Program.cs index c291f08..3cd10a0 100644 --- a/source/SampleApp.Main/Program.cs +++ b/source/SampleApp.Main/Program.cs @@ -13,10 +13,6 @@ public static AppBuilder BuildAvaloniaApp() => AppBuilder EnableMultiTouch = false, UseDBusMenu = true }) - .With(new Win32PlatformOptions { - EnableMultitouch = true, - AllowEglInitialization = true - }) .UseSkia() .UseReactiveUI() .LogToTrace(); diff --git a/source/SampleApp.Main/SampleApp.csproj b/source/SampleApp.Main/SampleApp.csproj index 78444d2..abe3c28 100644 --- a/source/SampleApp.Main/SampleApp.csproj +++ b/source/SampleApp.Main/SampleApp.csproj @@ -1,7 +1,7 @@  WinExe - net6.0 + net9.0 enable @@ -9,12 +9,13 @@ - - - - - - + + + + + + + diff --git a/source/SampleApp.Main/ViewModels/DashboardViewModel.cs b/source/SampleApp.Main/ViewModels/DashboardViewModel.cs index d31a6d2..443d89f 100644 --- a/source/SampleApp.Main/ViewModels/DashboardViewModel.cs +++ b/source/SampleApp.Main/ViewModels/DashboardViewModel.cs @@ -1,6 +1,6 @@ using Prism.Commands; -using Prism.Regions; -using Prism.Services.Dialogs; +using Prism.Dialogs; +using Prism.Navigation.Regions; using SampleApp.Common; using SampleApp.Services; using SampleApp.Views; diff --git a/source/SampleApp.Main/ViewModels/MainWindowViewModel.cs b/source/SampleApp.Main/ViewModels/MainWindowViewModel.cs index 310db4a..85ff98b 100644 --- a/source/SampleApp.Main/ViewModels/MainWindowViewModel.cs +++ b/source/SampleApp.Main/ViewModels/MainWindowViewModel.cs @@ -2,7 +2,8 @@ using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; using Prism.Commands; -using Prism.Services.Dialogs; +//using Prism.Services.Dialogs; +using Prism.Dialogs; using SampleApp.Common; using SampleApp.Views; using MenuItem = SampleApp.Main.Models.MenuItem; diff --git a/source/SampleApp.Main/ViewModels/MessageBoxViewModel.cs b/source/SampleApp.Main/ViewModels/MessageBoxViewModel.cs index f106bc3..7f35d35 100644 --- a/source/SampleApp.Main/ViewModels/MessageBoxViewModel.cs +++ b/source/SampleApp.Main/ViewModels/MessageBoxViewModel.cs @@ -1,7 +1,7 @@ using System; using Prism.Commands; using Prism.Mvvm; -using Prism.Services.Dialogs; +using Prism.Dialogs; namespace SampleApp.ViewModels; @@ -20,7 +20,7 @@ public MessageBoxViewModel() MaxWidth = 600; } - public event Action? RequestClose; + public DialogCloseListener RequestClose { get; } public DelegateCommand CmdResult => new((string buttonResult) => { @@ -69,6 +69,6 @@ public void OnDialogOpened(IDialogParameters parameters) public virtual void RaiseRequestClose(IDialogResult dialogResult) { - RequestClose?.Invoke(dialogResult); + RequestClose.Invoke(dialogResult); } } diff --git a/source/SampleApp.Main/ViewModels/SettingsViewModel.cs b/source/SampleApp.Main/ViewModels/SettingsViewModel.cs index e5a5df5..0c4bd97 100644 --- a/source/SampleApp.Main/ViewModels/SettingsViewModel.cs +++ b/source/SampleApp.Main/ViewModels/SettingsViewModel.cs @@ -1,4 +1,4 @@ -using Prism.Regions; +using Prism.Navigation.Regions; using SampleApp.Common; namespace SampleApp.ViewModels; diff --git a/source/SampleApp.Modules.Calendar/CalendarModule.cs b/source/SampleApp.Modules.Calendar/CalendarModule.cs index b6b91f7..cc6f7b7 100644 --- a/source/SampleApp.Modules.Calendar/CalendarModule.cs +++ b/source/SampleApp.Modules.Calendar/CalendarModule.cs @@ -1,6 +1,6 @@ -using Prism.Ioc; +using Prism.Ioc; using Prism.Modularity; -using Prism.Regions; +using Prism.Navigation.Regions; using SampleApp.Common; using SampleApp.Modules.Calendar.Views; @@ -18,4 +18,4 @@ public void RegisterTypes(IContainerRegistry containerRegistry) { } } -} \ No newline at end of file +} diff --git a/source/SampleApp.Modules.Calendar/SampleApp.Modules.Calendar.csproj b/source/SampleApp.Modules.Calendar/SampleApp.Modules.Calendar.csproj index 78c37d1..8d1f203 100644 --- a/source/SampleApp.Modules.Calendar/SampleApp.Modules.Calendar.csproj +++ b/source/SampleApp.Modules.Calendar/SampleApp.Modules.Calendar.csproj @@ -1,7 +1,7 @@ library - net6.0 + net9.0 enable ..\..\output @@ -15,11 +15,11 @@ - - - - - + + + + + diff --git a/source/SampleApp.Modules.Calendar/Views/CalendarView.axaml b/source/SampleApp.Modules.Calendar/Views/CalendarView.axaml index 36398f2..4fb4dc3 100644 --- a/source/SampleApp.Modules.Calendar/Views/CalendarView.axaml +++ b/source/SampleApp.Modules.Calendar/Views/CalendarView.axaml @@ -1,4 +1,4 @@ - - - - + diff --git a/source/SampleApp.Modules.Contacts/ContactsModule.cs b/source/SampleApp.Modules.Contacts/ContactsModule.cs index bb231ad..5257d80 100644 --- a/source/SampleApp.Modules.Contacts/ContactsModule.cs +++ b/source/SampleApp.Modules.Contacts/ContactsModule.cs @@ -1,6 +1,6 @@ -using Prism.Ioc; +using Prism.Ioc; using Prism.Modularity; -using Prism.Regions; +using Prism.Navigation.Regions; using SampleApp.Common; using SampleApp.Modules.Contacts.Views; @@ -17,4 +17,4 @@ public void OnInitialized(IContainerProvider containerProvider) public void RegisterTypes(IContainerRegistry containerRegistry) { } -} \ No newline at end of file +} diff --git a/source/SampleApp.Modules.Contacts/SampleApp.Modules.Contacts.csproj b/source/SampleApp.Modules.Contacts/SampleApp.Modules.Contacts.csproj index 78c37d1..e229950 100644 --- a/source/SampleApp.Modules.Contacts/SampleApp.Modules.Contacts.csproj +++ b/source/SampleApp.Modules.Contacts/SampleApp.Modules.Contacts.csproj @@ -1,9 +1,10 @@ library - net6.0 + net9.0 enable ..\..\output + 11.0 @@ -15,11 +16,11 @@ - - - - - + + + + + diff --git a/source/SampleApp.Modules.Mail/MailModule.cs b/source/SampleApp.Modules.Mail/MailModule.cs index bb20a1a..3e5bf30 100644 --- a/source/SampleApp.Modules.Mail/MailModule.cs +++ b/source/SampleApp.Modules.Mail/MailModule.cs @@ -1,6 +1,6 @@ -using Prism.Ioc; +using Prism.Ioc; using Prism.Modularity; -using Prism.Regions; +using Prism.Navigation.Regions; using SampleApp.Common; using SampleApp.Modules.Mail.ViewModels; using SampleApp.Modules.Mail.Views; diff --git a/source/SampleApp.Modules.Mail/SampleApp.Modules.Mail.csproj b/source/SampleApp.Modules.Mail/SampleApp.Modules.Mail.csproj index b841a4d..aa58445 100644 --- a/source/SampleApp.Modules.Mail/SampleApp.Modules.Mail.csproj +++ b/source/SampleApp.Modules.Mail/SampleApp.Modules.Mail.csproj @@ -1,19 +1,20 @@ library - net6.0 + net9.0 enable ..\..\output + 11.0 - - - - - + + + + + diff --git a/source/SampleApp.Modules.Mail/ViewModels/MailViewModel.cs b/source/SampleApp.Modules.Mail/ViewModels/MailViewModel.cs index f23f907..e890a2f 100644 --- a/source/SampleApp.Modules.Mail/ViewModels/MailViewModel.cs +++ b/source/SampleApp.Modules.Mail/ViewModels/MailViewModel.cs @@ -1,6 +1,6 @@ using Avalonia.Controls; using Prism.Commands; -using Prism.Regions; +using Prism.Navigation.Regions; using SampleApp.Common; using SampleApp.Services; diff --git a/source/SampleApp.Modules.Mail/Views/MailFocusedView.axaml b/source/SampleApp.Modules.Mail/Views/MailFocusedView.axaml index e1569a8..9c2393f 100644 --- a/source/SampleApp.Modules.Mail/Views/MailFocusedView.axaml +++ b/source/SampleApp.Modules.Mail/Views/MailFocusedView.axaml @@ -1,4 +1,4 @@ - - + SelectionMode="Single" > + @@ -22,6 +22,6 @@ - + diff --git a/source/SampleApp.Modules.Mail/Views/MailFocusedView.axaml.cs b/source/SampleApp.Modules.Mail/Views/MailFocusedView.axaml.cs index 9fd37fa..1e5e914 100644 --- a/source/SampleApp.Modules.Mail/Views/MailFocusedView.axaml.cs +++ b/source/SampleApp.Modules.Mail/Views/MailFocusedView.axaml.cs @@ -1,4 +1,4 @@ -using Avalonia.Controls; +using Avalonia.Controls; using Avalonia.Markup.Xaml; namespace SampleApp.Modules.Mail.Views; diff --git a/source/SampleApp.Modules.Message/MessageModule.cs b/source/SampleApp.Modules.Message/MessageModule.cs index e7defa0..b45aeab 100644 --- a/source/SampleApp.Modules.Message/MessageModule.cs +++ b/source/SampleApp.Modules.Message/MessageModule.cs @@ -1,6 +1,6 @@ -using Prism.Ioc; +using Prism.Ioc; using Prism.Modularity; -using Prism.Regions; +using Prism.Navigation.Regions; using SampleApp.Common; using SampleApp.Modules.Message.Views; @@ -19,4 +19,4 @@ public void RegisterTypes(IContainerRegistry containerRegistry) { } } -} \ No newline at end of file +} diff --git a/source/SampleApp.Modules.Message/SampleApp.Modules.Message.csproj b/source/SampleApp.Modules.Message/SampleApp.Modules.Message.csproj index 78c37d1..8d1f203 100644 --- a/source/SampleApp.Modules.Message/SampleApp.Modules.Message.csproj +++ b/source/SampleApp.Modules.Message/SampleApp.Modules.Message.csproj @@ -1,7 +1,7 @@ library - net6.0 + net9.0 enable ..\..\output @@ -15,11 +15,11 @@ - - - - - + + + + +