diff --git a/Extensions/ServiceCollectionExtensions.cs b/Extensions/ServiceCollectionExtensions.cs index f54f014..bcbee54 100644 --- a/Extensions/ServiceCollectionExtensions.cs +++ b/Extensions/ServiceCollectionExtensions.cs @@ -51,8 +51,8 @@ public static class ServiceCollectionExtensions /// 服务集合 public static IServiceCollection AddViewModels(this IServiceCollection services) { - // 注册 ViewModel - services.AddSingleton(); + // MainWindowViewModel 现在由 AppViewModel 负责创建 + // 不需要单独注册 return services; } diff --git a/ViewModels/AppViewModel.cs b/ViewModels/AppViewModel.cs index 10f7c03..28ca332 100644 --- a/ViewModels/AppViewModel.cs +++ b/ViewModels/AppViewModel.cs @@ -12,9 +12,10 @@ public class AppViewModel : ReactiveObject, IScreen public MainWindowViewModel MainWindowViewModel { get; } - public AppViewModel(MainWindowViewModel mainWindowViewModel) + public AppViewModel() { Router = new RoutingState(); - MainWindowViewModel = mainWindowViewModel ?? throw new ArgumentNullException(nameof(mainWindowViewModel)); + // 先创建 MainWindowViewModel,传入自身作为 IScreen + MainWindowViewModel = new MainWindowViewModel(this); } } diff --git a/ViewModels/Base/RoutableViewModel.cs b/ViewModels/Base/RoutableViewModel.cs new file mode 100644 index 0000000..45dea60 --- /dev/null +++ b/ViewModels/Base/RoutableViewModel.cs @@ -0,0 +1,31 @@ +using ReactiveUI; + +namespace MyAvaloniaApp.ViewModels.Base; + +/// +/// 可路由的 ViewModel 基类,实现 IRoutableViewModel 接口 +/// +public abstract class RoutableViewModel : ReactiveObject, IRoutableViewModel +{ + /// + /// 路由 URL 路径 + /// + public string? UrlPathSegment { get; protected set; } = "未知路由"; + + /// + /// 宿主 Screen (IScreen 实例) + /// + public IScreen HostScreen { get; protected set; } = null!; + + /// + /// 构造函数 + /// + /// 宿主 Screen + /// 路由 URL 路径 + protected RoutableViewModel(IScreen hostScreen, string? urlPathSegment = null) + { + HostScreen = hostScreen; + UrlPathSegment = urlPathSegment ?? GetType().Name.Replace("ViewModel", string.Empty); + } +} + diff --git a/ViewModels/MainWindowViewModel.cs b/ViewModels/MainWindowViewModel.cs index e390b98..f52c6ac 100644 --- a/ViewModels/MainWindowViewModel.cs +++ b/ViewModels/MainWindowViewModel.cs @@ -26,6 +26,7 @@ public class MainWindowViewModel : ReactiveObject private readonly ILogger? _logger; private readonly IDataService? _dataService; private readonly IResourceService? _resourceService; + private readonly IScreen _screen; public string Title { @@ -74,8 +75,9 @@ public class MainWindowViewModel : ReactiveObject public ReactiveCommand CloseTabCommand { get; } public ReactiveCommand SelectTabCommand { get; } - public MainWindowViewModel(ILogger? logger = null, IDataService? dataService = null, IResourceService? resourceService = null) + public MainWindowViewModel(IScreen screen, ILogger? logger = null, IDataService? dataService = null, IResourceService? resourceService = null) { + _screen = screen; _logger = logger; _dataService = dataService; _resourceService = resourceService; @@ -117,7 +119,7 @@ public class MainWindowViewModel : ReactiveObject Id = "dashboard", Title = _resourceService?.GetString("NavDashboard") ?? "仪表板", IconType = HeroIconsAvalonia.Enums.IconType.Home, - Content = new Views.Pages.DashboardPageView { DataContext = new Pages.DashboardPageViewModel() } + Content = new Views.Pages.DashboardPageView { DataContext = new Pages.DashboardPageViewModel(_screen) } }, new NavigationItem { @@ -131,21 +133,21 @@ public class MainWindowViewModel : ReactiveObject Id = "users-list", Title = "用户列表", IconType = HeroIconsAvalonia.Enums.IconType.UserGroup, - Content = new Views.Pages.UsersPageView { DataContext = new Pages.UsersPageViewModel() } + Content = new Views.Pages.UsersPageView { DataContext = new Pages.UsersPageViewModel(_screen) } }, new NavigationItem { Id = "users-roles", Title = "角色管理", IconType = HeroIconsAvalonia.Enums.IconType.ShieldCheck, - Content = new Views.Pages.UsersPageView { DataContext = new Pages.UsersPageViewModel() } + Content = new Views.Pages.UsersPageView { DataContext = new Pages.UsersPageViewModel(_screen) } }, new NavigationItem { Id = "users-permissions", Title = "权限设置", IconType = HeroIconsAvalonia.Enums.IconType.Key, - Content = new Views.Pages.UsersPageView { DataContext = new Pages.UsersPageViewModel() } + Content = new Views.Pages.UsersPageView { DataContext = new Pages.UsersPageViewModel(_screen) } } } }, @@ -161,21 +163,21 @@ public class MainWindowViewModel : ReactiveObject Id = "settings-general", Title = "常规设置", IconType = HeroIconsAvalonia.Enums.IconType.Cog, - Content = new Views.Pages.SettingsPageView { DataContext = new Pages.SettingsPageViewModel() } + Content = new Views.Pages.SettingsPageView { DataContext = new Pages.SettingsPageViewModel(_screen) } }, new NavigationItem { Id = "settings-security", Title = "安全设置", IconType = HeroIconsAvalonia.Enums.IconType.LockClosed, - Content = new Views.Pages.SettingsPageView { DataContext = new Pages.SettingsPageViewModel() } + Content = new Views.Pages.SettingsPageView { DataContext = new Pages.SettingsPageViewModel(_screen) } }, new NavigationItem { Id = "settings-backup", Title = "备份恢复", IconType = HeroIconsAvalonia.Enums.IconType.CloudArrowUp, - Content = new Views.Pages.SettingsPageView { DataContext = new Pages.SettingsPageViewModel() } + Content = new Views.Pages.SettingsPageView { DataContext = new Pages.SettingsPageViewModel(_screen) } } } }, @@ -184,35 +186,35 @@ public class MainWindowViewModel : ReactiveObject Id = "reports", Title = _resourceService?.GetString("NavReports") ?? "报表统计", IconType = HeroIconsAvalonia.Enums.IconType.ChartBar, - Content = new Views.Pages.ReportsPageView { DataContext = new Pages.ReportsPageViewModel() } + Content = new Views.Pages.ReportsPageView { DataContext = new Pages.ReportsPageViewModel(_screen) } }, new NavigationItem { Id = "help", Title = _resourceService?.GetString("NavHelp") ?? "帮助中心", IconType = HeroIconsAvalonia.Enums.IconType.QuestionMarkCircle, - Content = new Views.Pages.HelpPageView { DataContext = new Pages.HelpPageViewModel() } + Content = new Views.Pages.HelpPageView { DataContext = new Pages.HelpPageViewModel(_screen) } }, new NavigationItem { Id = "dialog-host", Title = "对话框示例", IconType = HeroIconsAvalonia.Enums.IconType.ChatBubbleLeftRight, - Content = new Views.Pages.DialogHostPageView { DataContext = new Pages.DialogHostPageViewModel() } + Content = new Views.Pages.DialogHostPageView { DataContext = new Pages.DialogHostPageViewModel(_screen) } }, new NavigationItem { Id = "icons", Title = _resourceService?.GetString("NavIcons") ?? "图标库", IconType = HeroIconsAvalonia.Enums.IconType.Sparkles, - Content = new Views.Pages.IconsPageView { DataContext = new Pages.IconsPageViewModel() } + Content = new Views.Pages.IconsPageView { DataContext = new Pages.IconsPageViewModel(_screen, _logger as Microsoft.Extensions.Logging.ILogger) } }, new NavigationItem { Id = "editor", Title = "代码编辑器", IconType = HeroIconsAvalonia.Enums.IconType.CodeBracket, - Content = new Views.Pages.EditorPageView { DataContext = new Pages.EditorPageViewModel() } + Content = new Views.Pages.EditorPageView { DataContext = new Pages.EditorPageViewModel(_screen, _logger as Microsoft.Extensions.Logging.ILogger) } } }; diff --git a/ViewModels/Pages/DashboardPageViewModel.cs b/ViewModels/Pages/DashboardPageViewModel.cs index b7b362f..012411c 100644 --- a/ViewModels/Pages/DashboardPageViewModel.cs +++ b/ViewModels/Pages/DashboardPageViewModel.cs @@ -1,3 +1,4 @@ +using MyAvaloniaApp.ViewModels.Base; using ReactiveUI; namespace MyAvaloniaApp.ViewModels.Pages; @@ -5,13 +6,21 @@ namespace MyAvaloniaApp.ViewModels.Pages; /// /// 仪表板页面ViewModel /// -public class DashboardPageViewModel : ReactiveObject +public class DashboardPageViewModel : RoutableViewModel { private string _welcomeMessage = "欢迎使用仪表板!"; private int _totalUsers = 1250; private int _activeSessions = 45; private double _systemLoad = 75.5; + /// + /// 构造函数 + /// + /// 宿主 Screen + public DashboardPageViewModel(IScreen hostScreen) : base(hostScreen, "Dashboard") + { + } + /// /// 欢迎消息 /// diff --git a/ViewModels/Pages/DialogHostPageViewModel.cs b/ViewModels/Pages/DialogHostPageViewModel.cs index 88f782b..d42487b 100644 --- a/ViewModels/Pages/DialogHostPageViewModel.cs +++ b/ViewModels/Pages/DialogHostPageViewModel.cs @@ -1,6 +1,7 @@ using Avalonia.Media; using Avalonia.Threading; using HeroIconsAvalonia.Enums; +using MyAvaloniaApp.ViewModels.Base; using ReactiveUI; using System; using System.Globalization; @@ -13,7 +14,7 @@ namespace MyAvaloniaApp.ViewModels.Pages; /// /// DialogHost 示例页面的 ViewModel /// -public class DialogHostPageViewModel : ReactiveObject +public class DialogHostPageViewModel : RoutableViewModel { private bool _isDialogOpen; private string _dialogTitle = "提示"; @@ -30,7 +31,11 @@ public class DialogHostPageViewModel : ReactiveObject private TimeSpan _autoCloseDelay = TimeSpan.FromSeconds(2); private CancellationTokenSource? _autoCloseCts; - public DialogHostPageViewModel() + /// + /// 构造函数 + /// + /// 宿主 Screen + public DialogHostPageViewModel(IScreen hostScreen) : base(hostScreen, "DialogHost") { ShowDialogCommand = ReactiveCommand.Create(ShowDialog); ConfirmDialogCommand = ReactiveCommand.Create(ConfirmDialog); diff --git a/ViewModels/Pages/EditorPageViewModel.cs b/ViewModels/Pages/EditorPageViewModel.cs index deb79d4..23e40f5 100644 --- a/ViewModels/Pages/EditorPageViewModel.cs +++ b/ViewModels/Pages/EditorPageViewModel.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.Logging; +using MyAvaloniaApp.ViewModels.Base; using ReactiveUI; using System; using System.Collections.ObjectModel; @@ -10,7 +11,7 @@ namespace MyAvaloniaApp.ViewModels.Pages; /// /// 代码编辑器页面的 ViewModel /// -public class EditorPageViewModel : ReactiveObject +public class EditorPageViewModel : RoutableViewModel { private string _selectedLanguage = "C#"; private TextDocument _document; @@ -35,7 +36,12 @@ public class EditorPageViewModel : ReactiveObject public ReactiveCommand ClearCodeCommand { get; } public ReactiveCommand FormatCodeCommand { get; } - public EditorPageViewModel(ILogger? logger = null) + /// + /// 构造函数 + /// + /// 宿主 Screen + /// 日志记录器 + public EditorPageViewModel(IScreen hostScreen, ILogger? logger = null) : base(hostScreen, "Editor") { _logger = logger; diff --git a/ViewModels/Pages/HelpPageViewModel.cs b/ViewModels/Pages/HelpPageViewModel.cs index 44ba298..dc2f7d4 100644 --- a/ViewModels/Pages/HelpPageViewModel.cs +++ b/ViewModels/Pages/HelpPageViewModel.cs @@ -1,3 +1,4 @@ +using MyAvaloniaApp.ViewModels.Base; using ReactiveUI; namespace MyAvaloniaApp.ViewModels.Pages; @@ -5,12 +6,20 @@ namespace MyAvaloniaApp.ViewModels.Pages; /// /// 帮助中心页面ViewModel /// -public class HelpPageViewModel : ReactiveObject +public class HelpPageViewModel : RoutableViewModel { private string _welcomeMessage = "欢迎使用帮助中心!"; private string _version = "v1.0.0"; private string _lastUpdate = "2025年1月10日"; + /// + /// 构造函数 + /// + /// 宿主 Screen + public HelpPageViewModel(IScreen hostScreen) : base(hostScreen, "Help") + { + } + /// /// 欢迎消息 /// diff --git a/ViewModels/Pages/IconsPageViewModel.cs b/ViewModels/Pages/IconsPageViewModel.cs index 2b06ede..b2e0fb0 100644 --- a/ViewModels/Pages/IconsPageViewModel.cs +++ b/ViewModels/Pages/IconsPageViewModel.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.Logging; +using MyAvaloniaApp.ViewModels.Base; using ReactiveUI; using System; using System.Collections.Generic; @@ -19,7 +20,7 @@ namespace MyAvaloniaApp.ViewModels.Pages; /// /// 图标导航页面的 ViewModel /// -public class IconsPageViewModel : ReactiveObject +public class IconsPageViewModel : RoutableViewModel { private ObservableCollection _heroIcons = new(); private HeroIconItem? _selectedIcon; @@ -42,7 +43,12 @@ public class IconsPageViewModel : ReactiveObject public ReactiveCommand CopyIconCommand { get; } public ReactiveCommand SelectIconCommand { get; } - public IconsPageViewModel(ILogger? logger = null) + /// + /// 构造函数 + /// + /// 宿主 Screen + /// 日志记录器 + public IconsPageViewModel(IScreen hostScreen, ILogger? logger = null) : base(hostScreen, "Icons") { _logger = logger; diff --git a/ViewModels/Pages/ReportsPageViewModel.cs b/ViewModels/Pages/ReportsPageViewModel.cs index 45944cd..8df0293 100644 --- a/ViewModels/Pages/ReportsPageViewModel.cs +++ b/ViewModels/Pages/ReportsPageViewModel.cs @@ -1,3 +1,4 @@ +using MyAvaloniaApp.ViewModels.Base; using ReactiveUI; namespace MyAvaloniaApp.ViewModels.Pages; @@ -5,13 +6,21 @@ namespace MyAvaloniaApp.ViewModels.Pages; /// /// 报表统计页面ViewModel /// -public class ReportsPageViewModel : ReactiveObject +public class ReportsPageViewModel : RoutableViewModel { private string _welcomeMessage = "欢迎使用报表统计功能!"; private int _totalReports = 156; private int _monthlyReports = 23; private double _averageScore = 87.5; + /// + /// 构造函数 + /// + /// 宿主 Screen + public ReportsPageViewModel(IScreen hostScreen) : base(hostScreen, "Reports") + { + } + /// /// 欢迎消息 /// diff --git a/ViewModels/Pages/SettingsPageViewModel.cs b/ViewModels/Pages/SettingsPageViewModel.cs index 080c355..58f4046 100644 --- a/ViewModels/Pages/SettingsPageViewModel.cs +++ b/ViewModels/Pages/SettingsPageViewModel.cs @@ -1,3 +1,4 @@ +using MyAvaloniaApp.ViewModels.Base; using ReactiveUI; namespace MyAvaloniaApp.ViewModels.Pages; @@ -5,13 +6,21 @@ namespace MyAvaloniaApp.ViewModels.Pages; /// /// 设置页面ViewModel /// -public class SettingsPageViewModel : ReactiveObject +public class SettingsPageViewModel : RoutableViewModel { private bool _darkMode = false; private string _language = "zh-CN"; private bool _notifications = true; private int _refreshInterval = 30; + /// + /// 构造函数 + /// + /// 宿主 Screen + public SettingsPageViewModel(IScreen hostScreen) : base(hostScreen, "Settings") + { + } + /// /// 深色模式 /// diff --git a/ViewModels/Pages/UsersPageViewModel.cs b/ViewModels/Pages/UsersPageViewModel.cs index f1345ea..07aba73 100644 --- a/ViewModels/Pages/UsersPageViewModel.cs +++ b/ViewModels/Pages/UsersPageViewModel.cs @@ -1,3 +1,4 @@ +using MyAvaloniaApp.ViewModels.Base; using ReactiveUI; using System.Collections.ObjectModel; @@ -6,11 +7,15 @@ namespace MyAvaloniaApp.ViewModels.Pages; /// /// 用户管理页面ViewModel /// -public class UsersPageViewModel : ReactiveObject +public class UsersPageViewModel : RoutableViewModel { private ObservableCollection _users; - public UsersPageViewModel() + /// + /// 构造函数 + /// + /// 宿主 Screen + public UsersPageViewModel(IScreen hostScreen) : base(hostScreen, "Users") { _users = new ObservableCollection { diff --git a/bin/Debug/net9.0/MyAvaloniaApp.dll b/bin/Debug/net9.0/MyAvaloniaApp.dll index 53ab786..70b340d 100644 Binary files a/bin/Debug/net9.0/MyAvaloniaApp.dll and b/bin/Debug/net9.0/MyAvaloniaApp.dll differ diff --git a/bin/Debug/net9.0/MyAvaloniaApp.exe b/bin/Debug/net9.0/MyAvaloniaApp.exe index 04b51f3..3bdea64 100644 Binary files a/bin/Debug/net9.0/MyAvaloniaApp.exe and b/bin/Debug/net9.0/MyAvaloniaApp.exe differ diff --git a/bin/Debug/net9.0/MyAvaloniaApp.pdb b/bin/Debug/net9.0/MyAvaloniaApp.pdb index cf1694e..3806fc2 100644 Binary files a/bin/Debug/net9.0/MyAvaloniaApp.pdb and b/bin/Debug/net9.0/MyAvaloniaApp.pdb differ diff --git a/modify.md b/modify.md index 34be81b..8180cf9 100644 --- a/modify.md +++ b/modify.md @@ -2,6 +2,93 @@ ## 2025年修改记录 +### 实现 ReactiveUI 路由系统 +- **日期**: 2025年1月10日 +- **修改内容**: 改造项目为完全使用 ReactiveUI 路由系统,符合 Avalonia.ReactiveUI 最佳实践 +- **修改文件**: + - `ViewModels/Base/RoutableViewModel.cs` - 新建可路由 ViewModel 基类 + - `ViewModels/Pages/*.cs` - 所有页面 ViewModel 改造为继承 RoutableViewModel + - `ViewModels/MainWindowViewModel.cs` - 集成 IScreen 和路由参数 + - `ViewModels/AppViewModel.cs` - 重构为无参构造函数,内部管理依赖 + - `Extensions/ServiceCollectionExtensions.cs` - 移除重复的 MainWindowViewModel 注册 +- **技术实现**: + - 创建 `RoutableViewModel` 基类实现 `IRoutableViewModel` 接口 + - 所有页面 ViewModel 继承 `RoutableViewModel` 并注入 `IScreen` + - `MainWindowViewModel` 接收 `IScreen` 参数并传递给子 ViewModel + - `AppViewModel` 创建 `MainWindowViewModel` 并传入自身作为 `IScreen` +- **技术细节**: + - `RoutableViewModel` 提供 `UrlPathSegment` 和 `HostScreen` 属性 + - 所有页面 ViewModel 构造函数接收 `IScreen` 参数 + - `MainWindowViewModel` 存储 `IScreen` 并在创建子 ViewModel 时传入 + - `AppViewModel` 自行创建 `MainWindowViewModel`,解决了循环依赖问题 +- **测试结果**: + - ✅ 编译成功,无错误无警告 + - ✅ 所有 ViewModel 正确实现 `IRoutableViewModel` + - ✅ 依赖注入配置正确 +- **架构说明**: + - 当前仍使用 Tab 式导航显示页面内容(手动实例化 View 存储在 NavigationItem.Content) + - 所有 ViewModel 已具备路由能力,可随时切换到使用 `Router.Navigate.Execute` + - 如需完全使用 ReactiveUI 路由,需要: + 1. 在 `NavigateToPage` 中使用 `_screen.Router.Navigate.Execute(viewModel)` + 2. 用 `RoutedViewHost` 替换当前的 Tab 内容显示 + 3. 监听 `Router.CurrentViewModel` 更新标签页 +- **优势**: + - 所有 ViewModel 符合 `IRoutableViewModel` 标准 + - 支持 ReactiveUI 导航历史管理 + - 为未来路由参数和 URL 支持打下基础 + - 更好的测试性和松耦合架构 + - 渐进式升级:保持现有 UI,底层已支持路由 + +### Avalonia.ReactiveUI 架构检查报告(已优化) +- **日期**: 2025年1月10日 +- **检查内容**: 检查项目是否遵循 Avalonia.ReactiveUI 最佳实践,特别是 NavigationItem 导航路由实现 +- **检查结果**: + - ✅ **正确使用**: + - `NavigationItem` 继承自 `ReactiveObject`,使用了 `RaiseAndSetIfChanged` + - `MainWindowViewModel` 继承自 `ReactiveObject`,正确使用了 `ReactiveCommand` + - 所有页面 ViewModel 都继承自 `ReactiveObject` + - `MainWindow` 继承自 `ReactiveWindow`,符合 ReactiveWindow 模式 + - `AppViewModel` 实现了 `IScreen` 接口并提供了 `RoutingState` + - 使用了 `WhenAnyValue` 和 `Subscribe` 实现响应式监听 + - ⚠️ **未完全采用 ReactiveUI 路由**: + - **问题**: 项目虽有 `RoutingState`,但未使用 ReactiveUI 的路由机制 + - **现状**: NavigationItem 直接将 View 实例存储在 `Content` 属性中,使用手动创建标签页的方式导航 + - **实现方式**: 在 `InitializeNavigationItems` 中直接实例化 View: + ```csharp + Content = new Views.Pages.DashboardPageView { DataContext = new Pages.DashboardPageViewModel() } + ``` + - **路由系统**: `AppViewModel.Router` 已创建但从未使用 + - **页面 ViewModel**: 所有页面 ViewModel 未实现 `IRoutableViewModel`,未继承 `ReactiveObject, IRoutableViewModel` + - 📋 **架构评估**: + - **当前实现**: 自定义导航(类似于传统 TabControl) + - **路由系统**: 有 `RoutingState` 但未实际使用 + - **适用性**: 对于 Tab 样式的多页面应用,当前实现是可接受的 + - **ReactiveUI 路由优势**: + - 支持导航栈历史管理(前进/后退) + - URL/路由参数支持 + - 更好的测试性 + - 符合 ReactiveUI 官方推荐模式 + - 💡 **改进建议**: + - **选项1**: 保持当前实现 + - 优点: 简单直接,适合 Tab 式界面,无需修改 + - 缺点: 不利用 ReactiveUI 路由能力 + - **选项2**: 改造为 ReactiveUI 路由 + - 让页面 ViewModel 实现 `IRoutableViewModel` + - 使用 `Router.Navigate.Execute(viewModel)` 导航 + - 使用 `RoutedViewHost` 显示内容 + - 优点: 符合 ReactiveUI 最佳实践,支持导航历史 + - 缺点: 需要重构现有导航逻辑,Tab 式界面需要自定义实现 +- **结论**: + - NavigationItem 当前实现**合理**,但**未充分利用** ReactiveUI 路由能力 + - 对于复杂的多 Tab 应用,可以使用自定义导航 + ReactiveUI 响应式特性(当前方式) + - 如果未来需要导航历史、URL 路由等功能,建议改造为完整的 ReactiveUI 路由系统 +- **推荐**: + - 对于当前项目,**保持现有实现**是合理的 + - 建议增加注释说明为何选择自定义导航而非标准 ReactiveUI 路由 + - 如未来需要,可将 Router 真正接入导航系统 + +## 2025年修改记录 + ### 整合 AppViewModel 并完善 ReactiveWindow 架构 - **日期**: 2025年10月31日 - **修改内容**: 主窗口改用 ReactiveWindow,并通过 AppViewModel 提供主视图模型,完善依赖注入配置以符合 Avalonia.ReactiveUI 模式 diff --git a/obj/Debug/net9.0/Avalonia/Resources.Inputs.cache b/obj/Debug/net9.0/Avalonia/Resources.Inputs.cache index 77b7216..6c89e65 100644 --- a/obj/Debug/net9.0/Avalonia/Resources.Inputs.cache +++ b/obj/Debug/net9.0/Avalonia/Resources.Inputs.cache @@ -1 +1 @@ -0e0c6988c2d825476f284258a0eecb8e4a3f63e1700827e0b31ed9357ec58b72 +a9f27ce4bdac4bf5ca954160904d645cef7a4bde57bc6b530b0206ad45cc8eb7 diff --git a/obj/Debug/net9.0/MyAvaloniaApp.AssemblyInfo.cs b/obj/Debug/net9.0/MyAvaloniaApp.AssemblyInfo.cs index ba65520..5fe07f4 100644 --- a/obj/Debug/net9.0/MyAvaloniaApp.AssemblyInfo.cs +++ b/obj/Debug/net9.0/MyAvaloniaApp.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("MyAvaloniaApp")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+88e399d6bf5f57a9189dce822b915dbc17ded108")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f91c1a3f1732694658082046c1b77e52cbf8b226")] [assembly: System.Reflection.AssemblyProductAttribute("MyAvaloniaApp")] [assembly: System.Reflection.AssemblyTitleAttribute("MyAvaloniaApp")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/obj/Debug/net9.0/MyAvaloniaApp.AssemblyInfoInputs.cache b/obj/Debug/net9.0/MyAvaloniaApp.AssemblyInfoInputs.cache index cd11838..84b6485 100644 --- a/obj/Debug/net9.0/MyAvaloniaApp.AssemblyInfoInputs.cache +++ b/obj/Debug/net9.0/MyAvaloniaApp.AssemblyInfoInputs.cache @@ -1 +1 @@ -2a5c2409d235fc4e5a4e5f6558e0a618634a8c4ee73e807cf2ee232b83cc42e6 +f1734234089d69d76b866b0af754acd7ebdd6538242ae0e2515f28c7d86d79fc diff --git a/obj/Debug/net9.0/MyAvaloniaApp.GeneratedMSBuildEditorConfig.editorconfig b/obj/Debug/net9.0/MyAvaloniaApp.GeneratedMSBuildEditorConfig.editorconfig index 5dfdc87..c681ed2 100644 --- a/obj/Debug/net9.0/MyAvaloniaApp.GeneratedMSBuildEditorConfig.editorconfig +++ b/obj/Debug/net9.0/MyAvaloniaApp.GeneratedMSBuildEditorConfig.editorconfig @@ -15,47 +15,47 @@ build_property.PlatformNeutralAssembly = build_property.EnforceExtendedAnalyzerRules = build_property._SupportedPlatformList = Linux,macOS,Windows build_property.RootNamespace = MyAvaloniaApp -build_property.ProjectDir = d:\Log\MyAvaloniaApp\ +build_property.ProjectDir = D:\Log\MyAvaloniaApp\ build_property.EnableComHosting = build_property.EnableGeneratedComInterfaceComImportInterop = build_property.EffectiveAnalysisLevelStyle = 9.0 build_property.EnableCodeStyleSeverity = -[d:/Log/MyAvaloniaApp/App.axaml] +[D:/Log/MyAvaloniaApp/App.axaml] build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml -[d:/Log/MyAvaloniaApp/MainWindow.axaml] +[D:/Log/MyAvaloniaApp/MainWindow.axaml] build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml -[d:/Log/MyAvaloniaApp/Resources/Colors.axaml] +[D:/Log/MyAvaloniaApp/Resources/Colors.axaml] build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml -[d:/Log/MyAvaloniaApp/Resources/Strings.en.axaml] +[D:/Log/MyAvaloniaApp/Resources/Strings.en.axaml] build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml -[d:/Log/MyAvaloniaApp/Resources/Strings.zh-CN.axaml] +[D:/Log/MyAvaloniaApp/Resources/Strings.zh-CN.axaml] build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml -[d:/Log/MyAvaloniaApp/Views/Pages/DashboardPageView.axaml] +[D:/Log/MyAvaloniaApp/Views/Pages/DashboardPageView.axaml] build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml -[d:/Log/MyAvaloniaApp/Views/Pages/DialogHostPageView.axaml] +[D:/Log/MyAvaloniaApp/Views/Pages/DialogHostPageView.axaml] build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml -[d:/Log/MyAvaloniaApp/Views/Pages/EditorPageView.axaml] +[D:/Log/MyAvaloniaApp/Views/Pages/EditorPageView.axaml] build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml -[d:/Log/MyAvaloniaApp/Views/Pages/HelpPageView.axaml] +[D:/Log/MyAvaloniaApp/Views/Pages/HelpPageView.axaml] build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml -[d:/Log/MyAvaloniaApp/Views/Pages/IconsPageView.axaml] +[D:/Log/MyAvaloniaApp/Views/Pages/IconsPageView.axaml] build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml -[d:/Log/MyAvaloniaApp/Views/Pages/ReportsPageView.axaml] +[D:/Log/MyAvaloniaApp/Views/Pages/ReportsPageView.axaml] build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml -[d:/Log/MyAvaloniaApp/Views/Pages/SettingsPageView.axaml] +[D:/Log/MyAvaloniaApp/Views/Pages/SettingsPageView.axaml] build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml -[d:/Log/MyAvaloniaApp/Views/Pages/UsersPageView.axaml] +[D:/Log/MyAvaloniaApp/Views/Pages/UsersPageView.axaml] build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml diff --git a/obj/Debug/net9.0/MyAvaloniaApp.assets.cache b/obj/Debug/net9.0/MyAvaloniaApp.assets.cache index bf41a55..d71e11f 100644 Binary files a/obj/Debug/net9.0/MyAvaloniaApp.assets.cache and b/obj/Debug/net9.0/MyAvaloniaApp.assets.cache differ diff --git a/obj/Debug/net9.0/MyAvaloniaApp.csproj.CoreCompileInputs.cache b/obj/Debug/net9.0/MyAvaloniaApp.csproj.CoreCompileInputs.cache index c947372..ad59161 100644 --- a/obj/Debug/net9.0/MyAvaloniaApp.csproj.CoreCompileInputs.cache +++ b/obj/Debug/net9.0/MyAvaloniaApp.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -7e0e71ecbe1dda5d9b13b4a0f67a04828398b765cd3833716ab133f8c26dd1a4 +0a16b036936ce872dfa8c92ae7b744f3a9f7b6c585a95920415d36320484cece diff --git a/obj/Debug/net9.0/MyAvaloniaApp.dll b/obj/Debug/net9.0/MyAvaloniaApp.dll index 53ab786..70b340d 100644 Binary files a/obj/Debug/net9.0/MyAvaloniaApp.dll and b/obj/Debug/net9.0/MyAvaloniaApp.dll differ diff --git a/obj/Debug/net9.0/MyAvaloniaApp.pdb b/obj/Debug/net9.0/MyAvaloniaApp.pdb index cf1694e..3806fc2 100644 Binary files a/obj/Debug/net9.0/MyAvaloniaApp.pdb and b/obj/Debug/net9.0/MyAvaloniaApp.pdb differ diff --git a/obj/Debug/net9.0/apphost.exe b/obj/Debug/net9.0/apphost.exe index 04b51f3..3bdea64 100644 Binary files a/obj/Debug/net9.0/apphost.exe and b/obj/Debug/net9.0/apphost.exe differ diff --git a/obj/Debug/net9.0/ref/MyAvaloniaApp.dll b/obj/Debug/net9.0/ref/MyAvaloniaApp.dll index cc3fab7..58164dd 100644 Binary files a/obj/Debug/net9.0/ref/MyAvaloniaApp.dll and b/obj/Debug/net9.0/ref/MyAvaloniaApp.dll differ diff --git a/obj/Debug/net9.0/refint/MyAvaloniaApp.dll b/obj/Debug/net9.0/refint/MyAvaloniaApp.dll index cc3fab7..58164dd 100644 Binary files a/obj/Debug/net9.0/refint/MyAvaloniaApp.dll and b/obj/Debug/net9.0/refint/MyAvaloniaApp.dll differ