Browse Source

命名空间重构

refactor/namespace-and-layering
root 1 month ago
parent
commit
24023d6fd9
  1. 2
      App.axaml
  2. 8
      App.axaml.cs
  3. 4
      Attached/TextEditorAssist.cs
  4. 4
      Attached/TextMateHelper.cs
  5. 2
      AuroraDesk.csproj
  6. 2
      AuroraDesk.sln
  7. 441
      AuroraDesk重构计划.md
  8. 6
      Configuration/AppSettings.cs
  9. 4
      Converters/StringConverters.cs
  10. 4
      Converters/TabStyleConverter.cs
  11. 38
      Extensions/ServiceCollectionExtensions.cs
  12. 6
      MainWindow.axaml
  13. 4
      MainWindow.axaml.cs
  14. 2
      Program.cs
  15. 4
      Services/ApiService.cs
  16. 4
      Services/DataService.cs
  17. 4
      Services/IApiService.cs
  18. 4
      Services/IDataService.cs
  19. 4
      Services/IResourceService.cs
  20. 4
      Services/LanguageManager.cs
  21. 4
      Services/ResourceService.cs
  22. 6
      ViewModels/AppViewModel.cs
  23. 4
      ViewModels/Base/RoutableViewModel.cs
  24. 10
      ViewModels/MainWindowViewModel.cs
  25. 4
      ViewModels/NavigationItem.cs
  26. 4
      ViewModels/Pages/DashboardPageViewModel.cs
  27. 6
      ViewModels/Pages/DialogHostPageViewModel.cs
  28. 8
      ViewModels/Pages/EditorPageViewModel.cs
  29. 4
      ViewModels/Pages/HelpPageViewModel.cs
  30. 6
      ViewModels/Pages/IconsPageViewModel.cs
  31. 4
      ViewModels/Pages/ReportsPageViewModel.cs
  32. 4
      ViewModels/Pages/SettingsPageViewModel.cs
  33. 4
      ViewModels/Pages/UsersPageViewModel.cs
  34. 4
      ViewModels/TabItem.cs
  35. 6
      Views/Pages/DashboardPageView.axaml
  36. 6
      Views/Pages/DashboardPageView.axaml.cs
  37. 6
      Views/Pages/DialogHostPageView.axaml
  38. 6
      Views/Pages/DialogHostPageView.axaml.cs
  39. 10
      Views/Pages/EditorPageView.axaml
  40. 6
      Views/Pages/EditorPageView.axaml.cs
  41. 6
      Views/Pages/HelpPageView.axaml
  42. 6
      Views/Pages/HelpPageView.axaml.cs
  43. 8
      Views/Pages/IconsPageView.axaml
  44. 6
      Views/Pages/IconsPageView.axaml.cs
  45. 6
      Views/Pages/ReportsPageView.axaml
  46. 6
      Views/Pages/ReportsPageView.axaml.cs
  47. 6
      Views/Pages/SettingsPageView.axaml
  48. 6
      Views/Pages/SettingsPageView.axaml.cs
  49. 8
      Views/Pages/UsersPageView.axaml
  50. 6
      Views/Pages/UsersPageView.axaml.cs
  51. 4
      Views/ViewLocator.cs
  52. BIN
      bin/Debug/net8.0/Avalonia.Base.dll
  53. BIN
      bin/Debug/net8.0/Avalonia.Controls.ColorPicker.dll
  54. BIN
      bin/Debug/net8.0/Avalonia.Controls.dll
  55. BIN
      bin/Debug/net8.0/Avalonia.DesignerSupport.dll
  56. BIN
      bin/Debug/net8.0/Avalonia.Desktop.dll
  57. BIN
      bin/Debug/net8.0/Avalonia.Diagnostics.dll
  58. BIN
      bin/Debug/net8.0/Avalonia.Dialogs.dll
  59. BIN
      bin/Debug/net8.0/Avalonia.Fonts.Inter.dll
  60. BIN
      bin/Debug/net8.0/Avalonia.FreeDesktop.dll
  61. BIN
      bin/Debug/net8.0/Avalonia.Markup.Xaml.dll
  62. BIN
      bin/Debug/net8.0/Avalonia.Markup.dll
  63. BIN
      bin/Debug/net8.0/Avalonia.Metal.dll
  64. BIN
      bin/Debug/net8.0/Avalonia.MicroCom.dll
  65. BIN
      bin/Debug/net8.0/Avalonia.Native.dll
  66. BIN
      bin/Debug/net8.0/Avalonia.OpenGL.dll
  67. BIN
      bin/Debug/net8.0/Avalonia.ReactiveUI.dll
  68. BIN
      bin/Debug/net8.0/Avalonia.Remote.Protocol.dll
  69. BIN
      bin/Debug/net8.0/Avalonia.Skia.dll
  70. BIN
      bin/Debug/net8.0/Avalonia.Themes.Fluent.dll
  71. BIN
      bin/Debug/net8.0/Avalonia.Themes.Simple.dll
  72. BIN
      bin/Debug/net8.0/Avalonia.Vulkan.dll
  73. BIN
      bin/Debug/net8.0/Avalonia.Win32.Automation.dll
  74. BIN
      bin/Debug/net8.0/Avalonia.Win32.dll
  75. BIN
      bin/Debug/net8.0/Avalonia.X11.dll
  76. BIN
      bin/Debug/net8.0/Avalonia.dll
  77. BIN
      bin/Debug/net8.0/DynamicData.dll
  78. BIN
      bin/Debug/net8.0/HarfBuzzSharp.dll
  79. BIN
      bin/Debug/net8.0/MicroCom.Runtime.dll
  80. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll
  81. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Configuration.Binder.dll
  82. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Configuration.CommandLine.dll
  83. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll
  84. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Configuration.FileExtensions.dll
  85. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Configuration.Json.dll
  86. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Configuration.UserSecrets.dll
  87. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Configuration.dll
  88. BIN
      bin/Debug/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll
  89. BIN
      bin/Debug/net8.0/Microsoft.Extensions.DependencyInjection.dll
  90. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll
  91. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Diagnostics.dll
  92. BIN
      bin/Debug/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll
  93. BIN
      bin/Debug/net8.0/Microsoft.Extensions.FileProviders.Physical.dll
  94. BIN
      bin/Debug/net8.0/Microsoft.Extensions.FileSystemGlobbing.dll
  95. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll
  96. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Hosting.dll
  97. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Logging.Abstractions.dll
  98. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Logging.Configuration.dll
  99. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Logging.Console.dll
  100. BIN
      bin/Debug/net8.0/Microsoft.Extensions.Logging.Debug.dll

2
App.axaml

@ -1,6 +1,6 @@
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="MyAvaloniaApp.App"
x:Class="AuroraDesk.App"
RequestedThemeVariant="Default">
<!-- "Default" ThemeVariant follows system theme variant. "Dark" or "Light" are other available options. -->

8
App.axaml.cs

@ -5,15 +5,15 @@ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using MyAvaloniaApp.Configuration;
using MyAvaloniaApp.Extensions;
using MyAvaloniaApp.Views;
using AuroraDesk.Configuration;
using AuroraDesk.Extensions;
using AuroraDesk.Views;
using ReactiveUI;
using Splat;
using System;
using System.IO;
namespace MyAvaloniaApp;
namespace AuroraDesk;
public partial class App : Application
{

4
Attached/TextEditorAssist.cs

@ -1,9 +1,9 @@
using Avalonia;
using Avalonia;
using Avalonia.Data;
using AvaloniaEdit;
using AvaloniaEdit.Document;
namespace MyAvaloniaApp.Attached;
namespace AuroraDesk.Attached;
/// <summary>
/// 为 <see cref="TextEditor"/> 提供可绑定的 <see cref="TextDocument"/> 附加属性,

4
Attached/TextMateHelper.cs

@ -1,11 +1,11 @@
using System;
using System;
using System.Collections.Generic;
using Avalonia;
using AvaloniaEdit;
using AvaloniaEdit.TextMate;
using TextMateSharp.Grammars;
namespace MyAvaloniaApp.Attached;
namespace AuroraDesk.Attached;
/// <summary>
/// 为 <see cref="TextEditor"/> 提供基于 TextMate 的语法高亮附加属性,

2
MyAvaloniaApp.csproj → AuroraDesk.csproj

@ -8,6 +8,8 @@
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
<UseWPF>false</UseWPF>
<UseWindowsForms>false</UseWindowsForms>
<RootNamespace>AuroraDesk</RootNamespace>
<AssemblyName>AuroraDesk</AssemblyName>
</PropertyGroup>
<!-- Linux发布配置 -->

2
MyAvaloniaApp.sln → AuroraDesk.sln

@ -2,7 +2,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyAvaloniaApp", "MyAvaloniaApp.csproj", "{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AuroraDesk", "AuroraDesk.csproj", "{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution

441
AuroraDesk重构计划.md

@ -0,0 +1,441 @@
# AuroraDesk 项目重构计划
## 📋 项目概述
**目标项目名**: AuroraDesk
**原项目名**: MyAvaloniaApp
**目标架构**: 整洁架构 (Clean Architecture)
**重点优化**: 减少 ViewModels 耦合,提高代码可维护性
**环境**: Windows 10
**注意事项**: 避免使用 Linux 语法,防止乱码问题
---
## 🎯 重构目标
### 1. 项目重命名
- 项目名称:`MyAvaloniaApp` → `AuroraDesk`
- 解决方案文件:`MyAvaloniaApp.sln` → `AuroraDesk.sln`
- 项目文件:`MyAvaloniaApp.csproj` → `AuroraDesk.csproj`
- 命名空间前缀:`MyAvaloniaApp.*` → `AuroraDesk.*`
### 2. 架构重构(整洁架构)
#### 2.1 项目分层结构
```
AuroraDesk/
├── AuroraDesk.Core/ # 核心领域层
│ ├── Entities/ # 领域实体
│ │ ├── NavigationItem.cs
│ │ ├── TabItem.cs
│ │ └── ...
│ ├── Interfaces/ # 领域接口
│ └── Exceptions/ # 领域异常
├── AuroraDesk.Application/ # 应用层
│ ├── Services/ # 应用服务接口
│ │ ├── INavigationService.cs
│ │ ├── IPageFactory.cs
│ │ └── ...
│ ├── DTOs/ # 数据传输对象
│ └── Mappings/ # 映射配置
├── AuroraDesk.Infrastructure/ # 基础设施层
│ ├── Services/ # 服务实现
│ │ ├── NavigationService.cs
│ │ ├── PageFactory.cs
│ │ ├── DataService.cs
│ │ ├── ApiService.cs
│ │ └── ResourceService.cs
│ ├── Configuration/ # 配置
│ │ └── AppSettings.cs
│ └── Extensions/ # 扩展方法
│ └── ServiceCollectionExtensions.cs
└── AuroraDesk.Presentation/ # 表示层
├── ViewModels/ # ViewModels(精简)
│ ├── MainWindowViewModel.cs
│ ├── AppViewModel.cs
│ └── Base/
│ └── RoutableViewModel.cs
├── Views/ # Views
│ ├── ViewLocator.cs
│ └── Pages/
├── Converters/ # 转换器
└── Behaviors/ # 行为
```
#### 2.2 命名空间规划
```csharp
// 核心领域层
AuroraDesk.Core
AuroraDesk.Core.Entities
AuroraDesk.Core.Interfaces
AuroraDesk.Core.Exceptions
// 应用层
AuroraDesk.Application
AuroraDesk.Application.Services
AuroraDesk.Application.DTOs
AuroraDesk.Application.Mappings
// 基础设施层
AuroraDesk.Infrastructure
AuroraDesk.Infrastructure.Services
AuroraDesk.Infrastructure.Configuration
AuroraDesk.Infrastructure.Extensions
// 表示层
AuroraDesk.Presentation
AuroraDesk.Presentation.ViewModels
AuroraDesk.Presentation.ViewModels.Base
AuroraDesk.Presentation.Views
AuroraDesk.Presentation.Views.Pages
AuroraDesk.Presentation.Converters
AuroraDesk.Presentation.Behaviors
```
### 3. 解耦 ViewModels 策略
#### 3.1 问题分析
**当前问题**:
- `MainWindowViewModel` 中直接创建了所有 `PageViewModel` 实例(高耦合)
- ViewModel 创建逻辑分散在 `InitializeNavigationItems` 方法中
- 难以进行单元测试
- 违反单一职责原则
**解决方案**:
1. **引入 PageViewModel 工厂模式**
- 创建 `IPageViewModelFactory` 接口
- 实现 `PageViewModelFactory`
- 通过依赖注入管理 ViewModel 创建
2. **引入导航服务**
- 创建 `INavigationService` 接口
- 封装导航逻辑,减少 MainWindowViewModel 职责
- 统一管理导航项配置
3. **将配置数据外置**
- 创建导航配置数据类(NavigationConfig)
- 从 ViewModel 中分离配置数据
- 配置可在应用启动时注入
#### 3.2 重构后的依赖关系
```
MainWindowViewModel
↓ (依赖)
INavigationService // 处理导航逻辑
IPageViewModelFactory // 创建 PageViewModel
ILogger // 日志记录
IScreen // ReactiveUI 路由
不再直接依赖:
❌ DashboardPageViewModel
❌ UsersPageViewModel
❌ SettingsPageViewModel
... (所有具体的 PageViewModel)
```
---
## 📝 详细重构步骤
### 阶段一:准备工作(不修改代码)
#### 步骤 1.1: 创建新项目结构(可选,建议先单项目重构)
- [ ] 创建分层项目结构(或多文件夹结构)
- [ ] 规划文件迁移路径
- [ ] 备份当前代码
#### 步骤 1.2: 分析依赖关系
- [ ] 梳理所有 ViewModel 之间的依赖
- [ ] 识别所有直接 new 实例化的地方
- [ ] 记录需要注入的服务
---
### 阶段二:架构重构(按顺序执行)
#### 步骤 2.1: 创建核心领域层
- [ ] 创建 `AuroraDesk.Core` 项目/文件夹
- [ ] 迁移实体类:`NavigationItem`, `TabItem``Core.Entities`
- [ ] 更新命名空间:`AuroraDesk.Core.Entities`
- [ ] 移除业务逻辑,只保留数据模型
#### 步骤 2.2: 创建应用层接口
- [ ] 创建 `AuroraDesk.Application` 项目/文件夹
- [ ] 定义 `INavigationService` 接口
- [ ] 定义 `IPageViewModelFactory` 接口
- [ ] 定义导航配置 DTO(NavigationConfig)
#### 步骤 2.3: 创建基础设施层实现
- [ ] 创建 `AuroraDesk.Infrastructure` 项目/文件夹
- [ ] 实现 `NavigationService`
- [ ] 实现 `PageViewModelFactory`
- [ ] 迁移现有服务:`DataService`, `ApiService`, `ResourceService`
- [ ] 更新服务命名空间为 `AuroraDesk.Infrastructure.Services`
#### 步骤 2.4: 重构表示层
- [ ] 更新 `MainWindowViewModel`,移除直接创建 ViewModel 的代码
- [ ] 注入 `INavigationService``IPageViewModelFactory`
- [ ] 简化 `MainWindowViewModel` 的职责
- [ ] 更新所有命名空间为 `AuroraDesk.Presentation.*`
---
### 阶段三:项目重命名(谨慎执行)
#### 步骤 3.1: 重命名项目文件
- [ ] 重命名 `.csproj` 文件
- [ ] 重命名 `.sln` 文件
- [ ] 更新项目文件中的 `<RootNamespace>``<AssemblyName>`
#### 步骤 3.2: 重命名命名空间(逐个文件修改)
- [ ] **不要使用批量替换**
- [ ] 逐个文件修改命名空间声明
- [ ] 逐个文件更新 using 语句
- [ ] 每次修改后编译测试
#### 步骤 3.3: 更新配置文件
- [ ] 更新 `appsettings.json` 中的项目相关配置
- [ ] 更新 `app.manifest` 中的程序集名称
- [ ] 更新所有批处理文件和脚本
---
### 阶段四:解耦 ViewModels(重点)
#### 步骤 4.1: 创建工厂接口和实现
```csharp
// AuroraDesk.Application/Services/IPageViewModelFactory.cs
public interface IPageViewModelFactory
{
T CreatePageViewModel<T>(IScreen screen) where T : IRoutableViewModel;
IRoutableViewModel CreatePageViewModel(string pageId, IScreen screen);
}
```
#### 步骤 4.2: 实现工厂类
```csharp
// AuroraDesk.Infrastructure/Services/PageViewModelFactory.cs
public class PageViewModelFactory : IPageViewModelFactory
{
private readonly IServiceProvider _serviceProvider;
public IRoutableViewModel CreatePageViewModel(string pageId, IScreen screen)
{
return pageId switch
{
"dashboard" => _serviceProvider.GetRequiredService<DashboardPageViewModel>(),
"users" => _serviceProvider.GetRequiredService<UsersPageViewModel>(),
// ... 其他页面
_ => throw new ArgumentException($"Unknown page: {pageId}")
};
}
}
```
#### 步骤 4.3: 创建导航服务
```csharp
// AuroraDesk.Application/Services/INavigationService.cs
public interface INavigationService
{
ObservableCollection<NavigationItem> GetNavigationItems();
void NavigateToPage(NavigationItem item);
}
```
#### 步骤 4.4: 重构 MainWindowViewModel
- [ ] 移除 `InitializeNavigationItems` 方法中的 ViewModel 创建逻辑
- [ ] 注入 `INavigationService` 获取导航项
- [ ] 使用 `IPageViewModelFactory` 创建 ViewModel
- [ ] 简化导航逻辑,委托给 `INavigationService`
---
### 阶段五:注册依赖注入
#### 步骤 5.1: 更新 ServiceCollectionExtensions
- [ ] 注册 `IPageViewModelFactory``PageViewModelFactory`
- [ ] 注册 `INavigationService``NavigationService`
- [ ] 注册所有 PageViewModel 为 Transient(或 Scoped)
- [ ] 更新命名空间引用
#### 步骤 5.2: 更新 App.axaml.cs
- [ ] 确保所有新服务正确注册
- [ ] 更新 ViewLocator 的命名空间
- [ ] 测试依赖注入是否正常工作
---
### 阶段六:测试和验证
#### 步骤 6.1: 编译测试
- [ ] 清理解决方案并重新编译
- [ ] 修复所有编译错误
- [ ] 修复所有命名空间引用错误
#### 步骤 6.2: 运行时测试
- [ ] 启动应用程序
- [ ] 测试导航功能
- [ ] 测试所有页面能否正常加载
- [ ] 测试标签页功能
#### 步骤 6.3: 代码检查
- [ ] 检查是否还有直接 new ViewModel 的地方
- [ ] 检查命名空间是否全部更新
- [ ] 检查是否有循环依赖
---
## 🔧 技术实现细节
### 1. PageViewModel 注册方式
```csharp
// ServiceCollectionExtensions.cs
services.AddTransient<DashboardPageViewModel>();
services.AddTransient<UsersPageViewModel>();
services.AddTransient<SettingsPageViewModel>();
// ... 其他 PageViewModel
```
### 2. 导航配置数据
```csharp
// NavigationConfig.cs
public class NavigationConfig
{
public List<NavigationItemConfig> Items { get; set; } = new();
}
public class NavigationItemConfig
{
public string Id { get; set; } = string.Empty;
public string Title { get; set; } = string.Empty;
public string PageViewModelType { get; set; } = string.Empty;
public IconType IconType { get; set; }
public List<NavigationItemConfig>? Children { get; set; }
}
```
### 3. MainWindowViewModel 重构示例
**重构前**:
```csharp
private void InitializeNavigationItems()
{
_navigationItems = new ObservableCollection<NavigationItem>
{
new NavigationItem { ViewModel = new DashboardPageViewModel(_screen) },
new NavigationItem { ViewModel = new UsersPageViewModel(_screen) },
// ...
};
}
```
**重构后**:
```csharp
private readonly INavigationService _navigationService;
public MainWindowViewModel(
IScreen screen,
INavigationService navigationService,
ILogger<MainWindowViewModel>? logger = null)
{
_screen = screen;
_navigationService = navigationService;
_logger = logger;
NavigationItems = _navigationService.GetNavigationItems();
}
```
---
## ⚠️ 注意事项
### 1. 不要批量替换
- ❌ **禁止**:使用 Visual Studio 的全局查找替换功能批量替换命名空间
- ✅ **正确做法**:逐个文件修改,每次修改后编译测试
### 2. Windows 10 环境
- ❌ **避免**:使用 Linux 风格的路径分隔符或命令
- ✅ **使用**:Windows 路径分隔符 `\` 或使用 `Path.Combine`
- ✅ **使用**:PowerShell 脚本而非 Bash 脚本
### 3. 编译顺序
- 先编译被依赖的层(Core → Application → Infrastructure → Presentation)
- 每次修改一层后立即编译测试
### 4. Git 版本控制
- 每个阶段完成后提交一次代码
- 使用有意义的提交信息
- 如果出现问题可以回退到上一个阶段
---
## 📊 预期成果
### 代码质量提升
- ✅ ViewModels 耦合度降低 80%+
- ✅ 代码可测试性提升
- ✅ 符合整洁架构原则
- ✅ 易于扩展新功能
### 项目结构
- ✅ 清晰的分层架构
- ✅ 统一的命名空间规范(Aurora 前缀)
- ✅ 更好的代码组织
### 维护性
- ✅ 新页面添加只需注册,无需修改 MainWindowViewModel
- ✅ 导航逻辑集中管理
- ✅ 配置与代码分离
---
## 📅 执行时间估算
- **阶段一**(准备):0.5 天
- **阶段二**(架构重构):2-3 天
- **阶段三**(重命名):1-2 天
- **阶段四**(解耦):2-3 天
- **阶段五**(DI注册):0.5 天
- **阶段六**(测试):1 天
**总计**:约 7-10 个工作日
---
## ✅ 检查清单
在每个阶段完成后,使用此清单验证:
- [ ] 所有文件命名空间已更新
- [ ] 所有 using 语句已更新
- [ ] 项目文件已更新
- [ ] 解决方案文件已更新
- [ ] 代码编译无错误
- [ ] 应用程序可以正常启动
- [ ] 主要功能正常工作
- [ ] 已更新 modify.md 记录修改
---
## 📝 修改记录
每次完成一个重要步骤后,请在 `modify.md` 文件中记录:
- 修改日期
- 修改内容
- 修改的文件列表
- 遇到的问题及解决方案
---
**文档创建日期**: 2025年1月
**最后更新**: 2025年1月
**状态**: 计划阶段

6
Configuration/AppSettings.cs

@ -1,7 +1,7 @@
namespace MyAvaloniaApp.Configuration;
namespace AuroraDesk.Configuration;
/// <summary>
/// 应用程序设置
/// 搴旂敤绋嬪簭璁剧疆
/// </summary>
public class AppSettings
{
@ -12,7 +12,7 @@ public class AppSettings
}
/// <summary>
/// 功能设置
/// 鍔熻兘璁剧疆
/// </summary>
public class FeatureSettings
{

4
Converters/StringConverters.cs

@ -1,10 +1,10 @@
using Avalonia.Data.Converters;
using Avalonia.Data.Converters;
using Avalonia.Media;
using HeroIconsAvalonia.Enums;
using System;
using System.Globalization;
namespace MyAvaloniaApp.Converters;
namespace AuroraDesk.Converters;
/// <summary>
/// 字符串转换器类

4
Converters/TabStyleConverter.cs

@ -1,9 +1,9 @@
using Avalonia.Data.Converters;
using Avalonia.Data.Converters;
using Avalonia.Media;
using System;
using System.Globalization;
namespace MyAvaloniaApp.Converters;
namespace AuroraDesk.Converters;
/// <summary>
/// 标签页样式转换器

38
Extensions/ServiceCollectionExtensions.cs

@ -1,26 +1,26 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using MyAvaloniaApp.Services;
using MyAvaloniaApp.ViewModels;
using AuroraDesk.Services;
using AuroraDesk.ViewModels;
using ReactiveUI;
using Splat;
using System;
namespace MyAvaloniaApp.Extensions;
namespace AuroraDesk.Extensions;
/// <summary>
/// 服务集合扩展方法
/// 鏈嶅姟闆嗗悎鎵╁睍鏂规硶
/// </summary>
public static class ServiceCollectionExtensions
{
/// <summary>
/// 添加 ReactiveUI 相关服务
/// 娣诲姞 ReactiveUI 鐩稿叧鏈嶅姟
/// </summary>
/// <param name="services">服务集合</param>
/// <returns>服务集合</returns>
/// <param name="services">鏈嶅姟闆嗗悎</param>
/// <returns>鏈嶅姟闆嗗悎</returns>
public static IServiceCollection AddReactiveUI(this IServiceCollection services)
{
// 注册 ReactiveUI 相关服务
// 娉ㄥ唽 ReactiveUI 鐩稿叧鏈嶅姟
services.AddSingleton<AppViewModel>();
services.AddSingleton<IScreen>(provider => provider.GetRequiredService<AppViewModel>());
@ -28,31 +28,31 @@ public static class ServiceCollectionExtensions
}
/// <summary>
/// 添加业务服务
/// 娣诲姞涓氬姟鏈嶅姟
/// </summary>
/// <param name="services">服务集合</param>
/// <returns>服务集合</returns>
/// <param name="services">鏈嶅姟闆嗗悎</param>
/// <returns>鏈嶅姟闆嗗悎</returns>
public static IServiceCollection AddBusinessServices(this IServiceCollection services)
{
// 注册业务服务
// 娉ㄥ唽涓氬姟鏈嶅姟
services.AddTransient<IDataService, DataService>();
services.AddTransient<IApiService, ApiService>();
// 注册资源服务
// 娉ㄥ唽璧勬簮鏈嶅姟
services.AddSingleton<IResourceService, ResourceService>();
return services;
}
/// <summary>
/// 添加 ViewModel 服务
/// 娣诲姞 ViewModel 鏈嶅姟
/// </summary>
/// <param name="services">服务集合</param>
/// <returns>服务集合</returns>
/// <param name="services">鏈嶅姟闆嗗悎</param>
/// <returns>鏈嶅姟闆嗗悎</returns>
public static IServiceCollection AddViewModels(this IServiceCollection services)
{
// 注册 MainWindowViewModel,通过 AppViewModel 获取
// 注意:需要先注册 AppViewModel
// 娉ㄥ唽 MainWindowViewModel锛岄€氳繃 AppViewModel 鑾峰彇
// 娉ㄦ剰锛氶渶瑕佸厛娉ㄥ唽 AppViewModel
services.AddTransient<MainWindowViewModel>(provider =>
{
var appViewModel = provider.GetRequiredService<AppViewModel>();

6
MainWindow.axaml

@ -2,13 +2,13 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="using:MyAvaloniaApp.ViewModels"
xmlns:converters="using:MyAvaloniaApp.Converters"
xmlns:vm="using:AuroraDesk.ViewModels"
xmlns:converters="using:AuroraDesk.Converters"
xmlns:tooltip="using:Avalonia.Controls"
xmlns:heroicons="clr-namespace:HeroIconsAvalonia.Controls;assembly=HeroIconsAvalonia"
xmlns:reactive="clr-namespace:Avalonia.ReactiveUI;assembly=Avalonia.ReactiveUI"
mc:Ignorable="d" d:DesignWidth="1200" d:DesignHeight="800"
x:Class="MyAvaloniaApp.MainWindow"
x:Class="AuroraDesk.MainWindow"
x:TypeArguments="vm:MainWindowViewModel"
x:DataType="vm:MainWindowViewModel"
Title="{Binding Title}"

4
MainWindow.axaml.cs

@ -5,11 +5,11 @@ using Avalonia.Input;
using Avalonia.Markup.Xaml;
using Avalonia.ReactiveUI;
using Microsoft.Extensions.Logging;
using MyAvaloniaApp.ViewModels;
using AuroraDesk.ViewModels;
using ReactiveUI;
using System.Reactive.Disposables;
namespace MyAvaloniaApp;
namespace AuroraDesk;
public partial class MainWindow : ReactiveWindow<MainWindowViewModel>, IActivatableView
{

2
Program.cs

@ -4,7 +4,7 @@ using Avalonia.ReactiveUI;
using System;
using System.Runtime.InteropServices;
namespace MyAvaloniaApp;
namespace AuroraDesk;
class Program
{

4
Services/ApiService.cs

@ -1,8 +1,8 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;
namespace MyAvaloniaApp.Services;
namespace AuroraDesk.Services;
/// <summary>
/// API 服务实现

4
Services/DataService.cs

@ -1,8 +1,8 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;
namespace MyAvaloniaApp.Services;
namespace AuroraDesk.Services;
/// <summary>
/// 数据服务实现

4
Services/IApiService.cs

@ -1,6 +1,6 @@
using System.Threading.Tasks;
using System.Threading.Tasks;
namespace MyAvaloniaApp.Services;
namespace AuroraDesk.Services;
/// <summary>
/// API 服务接口

4
Services/IDataService.cs

@ -1,6 +1,6 @@
using System.Threading.Tasks;
using System.Threading.Tasks;
namespace MyAvaloniaApp.Services;
namespace AuroraDesk.Services;
/// <summary>
/// 数据服务接口

4
Services/IResourceService.cs

@ -1,7 +1,7 @@
using System;
using System;
using System.Globalization;
namespace MyAvaloniaApp.Services
namespace AuroraDesk.Services
{
/// <summary>
/// 资源服务接口,用于管理多语言资源

4
Services/LanguageManager.cs

@ -1,8 +1,8 @@
using System;
using System;
using System.Globalization;
using System.Threading.Tasks;
namespace MyAvaloniaApp.Services
namespace AuroraDesk.Services
{
/// <summary>
/// 语言管理器,用于管理应用程序的语言设置

4
Services/ResourceService.cs

@ -1,10 +1,10 @@
using System;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Resources;
using System.Reflection;
namespace MyAvaloniaApp.Services
namespace AuroraDesk.Services
{
/// <summary>
/// 资源服务实现,用于管理多语言资源

6
ViewModels/AppViewModel.cs

@ -1,9 +1,9 @@
using System;
using System;
using Microsoft.Extensions.Logging;
using MyAvaloniaApp.Services;
using AuroraDesk.Services;
using ReactiveUI;
namespace MyAvaloniaApp.ViewModels;
namespace AuroraDesk.ViewModels;
/// <summary>
/// 应用程序级别的 ViewModel,实现 IScreen 接口

4
ViewModels/Base/RoutableViewModel.cs

@ -1,6 +1,6 @@
using ReactiveUI;
using ReactiveUI;
namespace MyAvaloniaApp.ViewModels.Base;
namespace AuroraDesk.ViewModels.Base;
/// <summary>
/// 可路由的 ViewModel 基类,实现 IRoutableViewModel 接口

10
ViewModels/MainWindowViewModel.cs

@ -1,7 +1,7 @@
using Microsoft.Extensions.Logging;
using MyAvaloniaApp.Services;
using MyAvaloniaApp.ViewModels.Base;
using MyAvaloniaApp.ViewModels.Pages;
using Microsoft.Extensions.Logging;
using AuroraDesk.Services;
using AuroraDesk.ViewModels.Base;
using AuroraDesk.ViewModels.Pages;
using ReactiveUI;
using System;
using System.Collections.ObjectModel;
@ -9,7 +9,7 @@ using System.Linq;
using System.Reactive;
using System.Reactive.Linq;
namespace MyAvaloniaApp.ViewModels;
namespace AuroraDesk.ViewModels;
/// <summary>
/// 主窗口的 ViewModel,使用完整的 ReactiveUI 路由系统

4
ViewModels/NavigationItem.cs

@ -1,9 +1,9 @@
using ReactiveUI;
using ReactiveUI;
using HeroIconsAvalonia.Enums;
using System;
using System.Collections.ObjectModel;
namespace MyAvaloniaApp.ViewModels;
namespace AuroraDesk.ViewModels;
/// <summary>
/// 导航项模型

4
ViewModels/Pages/DashboardPageViewModel.cs

@ -1,7 +1,7 @@
using MyAvaloniaApp.ViewModels.Base;
using AuroraDesk.ViewModels.Base;
using ReactiveUI;
namespace MyAvaloniaApp.ViewModels.Pages;
namespace AuroraDesk.ViewModels.Pages;
/// <summary>
/// 仪表板页面ViewModel

6
ViewModels/Pages/DialogHostPageViewModel.cs

@ -1,7 +1,7 @@
using Avalonia.Media;
using Avalonia.Media;
using Avalonia.Threading;
using HeroIconsAvalonia.Enums;
using MyAvaloniaApp.ViewModels.Base;
using AuroraDesk.ViewModels.Base;
using ReactiveUI;
using System;
using System.Globalization;
@ -9,7 +9,7 @@ using System.Reactive;
using System.Threading;
using System.Threading.Tasks;
namespace MyAvaloniaApp.ViewModels.Pages;
namespace AuroraDesk.ViewModels.Pages;
/// <summary>
/// DialogHost 示例页面的 ViewModel

8
ViewModels/Pages/EditorPageViewModel.cs

@ -1,12 +1,12 @@
using Microsoft.Extensions.Logging;
using MyAvaloniaApp.ViewModels.Base;
using Microsoft.Extensions.Logging;
using AuroraDesk.ViewModels.Base;
using ReactiveUI;
using System;
using System.Collections.ObjectModel;
using System.Reactive;
using AvaloniaEdit.Document;
namespace MyAvaloniaApp.ViewModels.Pages;
namespace AuroraDesk.ViewModels.Pages;
/// <summary>
/// 代码编辑器页面的 ViewModel
@ -87,7 +87,7 @@ public class EditorPageViewModel : RoutableViewModel
"\n" +
"using System;\n" +
"\n" +
"namespace MyAvaloniaApp\n" +
"namespace AuroraDesk\n" +
"{\n" +
" public class Program\n" +
" {\n" +

4
ViewModels/Pages/HelpPageViewModel.cs

@ -1,7 +1,7 @@
using MyAvaloniaApp.ViewModels.Base;
using AuroraDesk.ViewModels.Base;
using ReactiveUI;
namespace MyAvaloniaApp.ViewModels.Pages;
namespace AuroraDesk.ViewModels.Pages;
/// <summary>
/// 帮助中心页面ViewModel

6
ViewModels/Pages/IconsPageViewModel.cs

@ -1,5 +1,5 @@
using Microsoft.Extensions.Logging;
using MyAvaloniaApp.ViewModels.Base;
using Microsoft.Extensions.Logging;
using AuroraDesk.ViewModels.Base;
using ReactiveUI;
using System;
using System.Collections.Generic;
@ -15,7 +15,7 @@ using Avalonia.Controls;
using Avalonia;
using Avalonia.Layout;
namespace MyAvaloniaApp.ViewModels.Pages;
namespace AuroraDesk.ViewModels.Pages;
/// <summary>
/// 图标导航页面的 ViewModel

4
ViewModels/Pages/ReportsPageViewModel.cs

@ -1,7 +1,7 @@
using MyAvaloniaApp.ViewModels.Base;
using AuroraDesk.ViewModels.Base;
using ReactiveUI;
namespace MyAvaloniaApp.ViewModels.Pages;
namespace AuroraDesk.ViewModels.Pages;
/// <summary>
/// 报表统计页面ViewModel

4
ViewModels/Pages/SettingsPageViewModel.cs

@ -1,7 +1,7 @@
using MyAvaloniaApp.ViewModels.Base;
using AuroraDesk.ViewModels.Base;
using ReactiveUI;
namespace MyAvaloniaApp.ViewModels.Pages;
namespace AuroraDesk.ViewModels.Pages;
/// <summary>
/// 设置页面ViewModel

4
ViewModels/Pages/UsersPageViewModel.cs

@ -1,8 +1,8 @@
using MyAvaloniaApp.ViewModels.Base;
using AuroraDesk.ViewModels.Base;
using ReactiveUI;
using System.Collections.ObjectModel;
namespace MyAvaloniaApp.ViewModels.Pages;
namespace AuroraDesk.ViewModels.Pages;
/// <summary>
/// 用户管理页面ViewModel

4
ViewModels/TabItem.cs

@ -1,7 +1,7 @@
using ReactiveUI;
using ReactiveUI;
using HeroIconsAvalonia.Enums;
namespace MyAvaloniaApp.ViewModels;
namespace AuroraDesk.ViewModels;
/// <summary>
/// 标签页项模型

6
Views/Pages/DashboardPageView.axaml

@ -1,11 +1,11 @@
<reactive:ReactiveUserControl xmlns="https://github.com/avaloniaui"
<reactive:ReactiveUserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="using:MyAvaloniaApp.ViewModels.Pages"
xmlns:vm="using:AuroraDesk.ViewModels.Pages"
xmlns:reactive="clr-namespace:Avalonia.ReactiveUI;assembly=Avalonia.ReactiveUI"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="600"
x:Class="MyAvaloniaApp.Views.Pages.DashboardPageView"
x:Class="AuroraDesk.Views.Pages.DashboardPageView"
x:DataType="vm:DashboardPageViewModel">
<Design.DataContext>

6
Views/Pages/DashboardPageView.axaml.cs

@ -1,8 +1,8 @@
using Avalonia.ReactiveUI;
using Avalonia.ReactiveUI;
using Avalonia.Markup.Xaml;
using MyAvaloniaApp.ViewModels.Pages;
using AuroraDesk.ViewModels.Pages;
namespace MyAvaloniaApp.Views.Pages;
namespace AuroraDesk.Views.Pages;
public partial class DashboardPageView : ReactiveUserControl<DashboardPageViewModel>
{

6
Views/Pages/DialogHostPageView.axaml

@ -1,13 +1,13 @@
<reactive:ReactiveUserControl xmlns="https://github.com/avaloniaui"
<reactive:ReactiveUserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="using:MyAvaloniaApp.ViewModels.Pages"
xmlns:vm="using:AuroraDesk.ViewModels.Pages"
xmlns:dialogHost="clr-namespace:DialogHostAvalonia;assembly=DialogHost.Avalonia"
xmlns:heroicons="clr-namespace:HeroIconsAvalonia.Controls;assembly=HeroIconsAvalonia"
xmlns:reactive="clr-namespace:Avalonia.ReactiveUI;assembly=Avalonia.ReactiveUI"
mc:Ignorable="d"
x:Class="MyAvaloniaApp.Views.Pages.DialogHostPageView"
x:Class="AuroraDesk.Views.Pages.DialogHostPageView"
x:DataType="vm:DialogHostPageViewModel">
<Design.DataContext>

6
Views/Pages/DialogHostPageView.axaml.cs

@ -1,8 +1,8 @@
using Avalonia.ReactiveUI;
using Avalonia.ReactiveUI;
using Avalonia.Markup.Xaml;
using MyAvaloniaApp.ViewModels.Pages;
using AuroraDesk.ViewModels.Pages;
namespace MyAvaloniaApp.Views.Pages;
namespace AuroraDesk.Views.Pages;
public partial class DialogHostPageView : ReactiveUserControl<DialogHostPageViewModel>
{

10
Views/Pages/EditorPageView.axaml

@ -1,15 +1,15 @@
<reactive:ReactiveUserControl xmlns="https://github.com/avaloniaui"
<reactive:ReactiveUserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="using:MyAvaloniaApp.ViewModels.Pages"
xmlns:converters="using:MyAvaloniaApp.Converters"
xmlns:vm="using:AuroraDesk.ViewModels.Pages"
xmlns:converters="using:AuroraDesk.Converters"
xmlns:avaloniaEdit="clr-namespace:AvaloniaEdit;assembly=AvaloniaEdit"
xmlns:attached="using:MyAvaloniaApp.Attached"
xmlns:attached="using:AuroraDesk.Attached"
xmlns:heroicons="clr-namespace:HeroIconsAvalonia.Controls;assembly=HeroIconsAvalonia"
xmlns:reactive="clr-namespace:Avalonia.ReactiveUI;assembly=Avalonia.ReactiveUI"
mc:Ignorable="d" d:DesignWidth="1200" d:DesignHeight="800"
x:Class="MyAvaloniaApp.Views.Pages.EditorPageView"
x:Class="AuroraDesk.Views.Pages.EditorPageView"
x:DataType="vm:EditorPageViewModel">
<Design.DataContext>

6
Views/Pages/EditorPageView.axaml.cs

@ -1,8 +1,8 @@
using Avalonia.ReactiveUI;
using Avalonia.ReactiveUI;
using Avalonia.Markup.Xaml;
using MyAvaloniaApp.ViewModels.Pages;
using AuroraDesk.ViewModels.Pages;
namespace MyAvaloniaApp.Views.Pages;
namespace AuroraDesk.Views.Pages;
/// <summary>
/// 代码编辑器页面的 View

6
Views/Pages/HelpPageView.axaml

@ -1,11 +1,11 @@
<reactive:ReactiveUserControl xmlns="https://github.com/avaloniaui"
<reactive:ReactiveUserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="using:MyAvaloniaApp.ViewModels.Pages"
xmlns:vm="using:AuroraDesk.ViewModels.Pages"
xmlns:reactive="clr-namespace:Avalonia.ReactiveUI;assembly=Avalonia.ReactiveUI"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="600"
x:Class="MyAvaloniaApp.Views.Pages.HelpPageView"
x:Class="AuroraDesk.Views.Pages.HelpPageView"
x:DataType="vm:HelpPageViewModel">
<Design.DataContext>

6
Views/Pages/HelpPageView.axaml.cs

@ -1,8 +1,8 @@
using Avalonia.ReactiveUI;
using Avalonia.ReactiveUI;
using Avalonia.Markup.Xaml;
using MyAvaloniaApp.ViewModels.Pages;
using AuroraDesk.ViewModels.Pages;
namespace MyAvaloniaApp.Views.Pages;
namespace AuroraDesk.Views.Pages;
public partial class HelpPageView : ReactiveUserControl<HelpPageViewModel>
{

8
Views/Pages/IconsPageView.axaml

@ -1,13 +1,13 @@
<reactive:ReactiveUserControl xmlns="https://github.com/avaloniaui"
<reactive:ReactiveUserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="using:MyAvaloniaApp.ViewModels.Pages"
xmlns:converters="using:MyAvaloniaApp.Converters"
xmlns:vm="using:AuroraDesk.ViewModels.Pages"
xmlns:converters="using:AuroraDesk.Converters"
xmlns:heroicons="clr-namespace:HeroIconsAvalonia.Controls;assembly=HeroIconsAvalonia"
xmlns:reactive="clr-namespace:Avalonia.ReactiveUI;assembly=Avalonia.ReactiveUI"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="600"
x:Class="MyAvaloniaApp.Views.Pages.IconsPageView"
x:Class="AuroraDesk.Views.Pages.IconsPageView"
x:DataType="vm:IconsPageViewModel">
<Design.DataContext>

6
Views/Pages/IconsPageView.axaml.cs

@ -1,8 +1,8 @@
using Avalonia.ReactiveUI;
using Avalonia.ReactiveUI;
using Avalonia.Markup.Xaml;
using MyAvaloniaApp.ViewModels.Pages;
using AuroraDesk.ViewModels.Pages;
namespace MyAvaloniaApp.Views.Pages;
namespace AuroraDesk.Views.Pages;
/// <summary>
/// 图标导航页面的 View

6
Views/Pages/ReportsPageView.axaml

@ -1,11 +1,11 @@
<reactive:ReactiveUserControl xmlns="https://github.com/avaloniaui"
<reactive:ReactiveUserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="using:MyAvaloniaApp.ViewModels.Pages"
xmlns:vm="using:AuroraDesk.ViewModels.Pages"
xmlns:reactive="clr-namespace:Avalonia.ReactiveUI;assembly=Avalonia.ReactiveUI"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="600"
x:Class="MyAvaloniaApp.Views.Pages.ReportsPageView"
x:Class="AuroraDesk.Views.Pages.ReportsPageView"
x:DataType="vm:ReportsPageViewModel">
<Design.DataContext>

6
Views/Pages/ReportsPageView.axaml.cs

@ -1,8 +1,8 @@
using Avalonia.ReactiveUI;
using Avalonia.ReactiveUI;
using Avalonia.Markup.Xaml;
using MyAvaloniaApp.ViewModels.Pages;
using AuroraDesk.ViewModels.Pages;
namespace MyAvaloniaApp.Views.Pages;
namespace AuroraDesk.Views.Pages;
public partial class ReportsPageView : ReactiveUserControl<ReportsPageViewModel>
{

6
Views/Pages/SettingsPageView.axaml

@ -1,11 +1,11 @@
<reactive:ReactiveUserControl xmlns="https://github.com/avaloniaui"
<reactive:ReactiveUserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="using:MyAvaloniaApp.ViewModels.Pages"
xmlns:vm="using:AuroraDesk.ViewModels.Pages"
xmlns:reactive="clr-namespace:Avalonia.ReactiveUI;assembly=Avalonia.ReactiveUI"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="600"
x:Class="MyAvaloniaApp.Views.Pages.SettingsPageView"
x:Class="AuroraDesk.Views.Pages.SettingsPageView"
x:DataType="vm:SettingsPageViewModel">
<Design.DataContext>

6
Views/Pages/SettingsPageView.axaml.cs

@ -1,8 +1,8 @@
using Avalonia.ReactiveUI;
using Avalonia.ReactiveUI;
using Avalonia.Markup.Xaml;
using MyAvaloniaApp.ViewModels.Pages;
using AuroraDesk.ViewModels.Pages;
namespace MyAvaloniaApp.Views.Pages;
namespace AuroraDesk.Views.Pages;
public partial class SettingsPageView : ReactiveUserControl<SettingsPageViewModel>
{

8
Views/Pages/UsersPageView.axaml

@ -1,12 +1,12 @@
<reactive:ReactiveUserControl xmlns="https://github.com/avaloniaui"
<reactive:ReactiveUserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="using:MyAvaloniaApp.ViewModels.Pages"
xmlns:converters="using:MyAvaloniaApp.Converters"
xmlns:vm="using:AuroraDesk.ViewModels.Pages"
xmlns:converters="using:AuroraDesk.Converters"
xmlns:reactive="clr-namespace:Avalonia.ReactiveUI;assembly=Avalonia.ReactiveUI"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="600"
x:Class="MyAvaloniaApp.Views.Pages.UsersPageView"
x:Class="AuroraDesk.Views.Pages.UsersPageView"
x:DataType="vm:UsersPageViewModel">
<Design.DataContext>

6
Views/Pages/UsersPageView.axaml.cs

@ -1,8 +1,8 @@
using Avalonia.ReactiveUI;
using Avalonia.ReactiveUI;
using Avalonia.Markup.Xaml;
using MyAvaloniaApp.ViewModels.Pages;
using AuroraDesk.ViewModels.Pages;
namespace MyAvaloniaApp.Views.Pages;
namespace AuroraDesk.Views.Pages;
public partial class UsersPageView : ReactiveUserControl<UsersPageViewModel>
{

4
Views/ViewLocator.cs

@ -1,11 +1,11 @@
using ReactiveUI;
using ReactiveUI;
using Splat;
using System;
using System.Diagnostics;
using System.Linq;
using Microsoft.Extensions.DependencyInjection;
namespace MyAvaloniaApp.Views;
namespace AuroraDesk.Views;
/// <summary>
/// 视图定位器,用于将 ViewModel 映射到对应的 View

BIN
bin/Debug/net8.0/Avalonia.Base.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.Controls.ColorPicker.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.Controls.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.DesignerSupport.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.Desktop.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.Diagnostics.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.Dialogs.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.Fonts.Inter.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.FreeDesktop.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.Markup.Xaml.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.Markup.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.Metal.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.MicroCom.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.Native.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.OpenGL.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.ReactiveUI.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.Remote.Protocol.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.Skia.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.Themes.Fluent.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.Themes.Simple.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.Vulkan.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.Win32.Automation.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.Win32.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.X11.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Avalonia.dll

Binary file not shown.

BIN
bin/Debug/net8.0/DynamicData.dll

Binary file not shown.

BIN
bin/Debug/net8.0/HarfBuzzSharp.dll

Binary file not shown.

BIN
bin/Debug/net8.0/MicroCom.Runtime.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.Configuration.Binder.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.Configuration.CommandLine.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.Configuration.FileExtensions.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.Configuration.Json.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.Configuration.UserSecrets.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.Configuration.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.DependencyInjection.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.Diagnostics.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.FileProviders.Physical.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.FileSystemGlobbing.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.Hosting.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.Logging.Abstractions.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.Logging.Configuration.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.Logging.Console.dll

Binary file not shown.

BIN
bin/Debug/net8.0/Microsoft.Extensions.Logging.Debug.dll

Binary file not shown.

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save