3.7 KiB
3.7 KiB
name, description, disable-model-invocation
| name | description | disable-model-invocation |
|---|---|---|
| add-module | 在 PipeReviewReport 客户端中添加一个新的功能模块,包含完整的目录结构、AppModule 元数据、 主视图和 ViewModel。当用户需要新建客户端模块时使用。 | false |
添加客户端功能模块
目录结构
在 Source/Modules/<模块名>/ 下创建:
PipeReviewReport.<模块名>/
├── PipeReviewReport.<模块名>.csproj
├── AppModule.cs
├── Views/
│ ├── <模块名>MainView.xaml
│ ├── <模块名>MainView.xaml.cs
│ ├── Dialogs/ # 可选:弹窗(Parameter + ViewModel 同 .xaml.cs)
│ └── Steps/ # 可选:向导步骤 UserControl(可共用父 VM)
└── ViewModels/
└── <模块名>MainViewModel.cs
复杂业务服务优先放 Framework/Services/(模块间共享);仅本模块私有的可放模块 Services/。
Step 1 — 创建 .csproj
参考现有模块的 .csproj,核心是引用 Framework 项目。
Step 2 — AppModule.cs
实现 IAppModule 接口:
using PipeReviewReport.Shared;
using PipeReviewReport.<模块名>.Views;
using PipeReviewReport.Framework.Interfaces;
using PipeReviewReport.Resources.Fonts;
using System.Windows.Controls;
namespace PipeReviewReport.<模块名>;
public class AppModule : IAppModule
{
public string Key { get; } = ConstKeys.SK_XXX;
public string DisplayName { get; } = "XXX(简短说明)";
public string FullName { get; } = "模块完整中文名";
public string EnglishFullName { get; } = "Module English Name";
public string Description { get; } = "模块功能描述。";
// 用字体图标:侧栏选中态可随 Foreground 变白
public IconNameEnum Icon { get; } = IconNameEnum.Folder;
public ContentControl Content { get; } = new <模块名>MainView();
public bool IsEnabled { get; } = true;
public int Order { get; } = 10;
}
Key:从PipeReviewReport.Shared.ConstKeys取对应的SK_XXX常量Icon:用IconNameEnum字体图标(不要用 PNG,否则侧栏选中态无法变色)Order:侧栏排序,数值越小越靠上;现有模块按 10/20/…/80 间隔,方便插入
Step 3 — 主 ViewModel
using PipeReviewReport.Framework.ViewModels;
namespace PipeReviewReport.<模块名>.ViewModels;
internal class <模块名>MainViewModel : ViewModelBaseEx
{
protected override void LoadedOnce()
{
// 首次加载初始化
}
}
Step 4 — 主 View(XAML)
先读取 Source/XAML_Preset.txt 中 View 模板,复制 xmlns 引用,然后:
<UserControl
x:Class="PipeReviewReport.<模块名>.Views.<模块名>MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:PipeReviewReport.<模块名>.Views"
xmlns:core="MAX.Core"
...(其余 xmlns 从 XAML_Preset.txt 复制)
d:DataContext="{d:DesignInstance Type=local:<模块名>MainViewModel}"
Style="{DynamicResource UserControlStyle}"
DataContext="{core:DISource Type=local:<模块名>MainViewModel}">
<Grid>
</Grid>
</UserControl>
Step 5 — 添加到主程序
在 Source/PipeReviewReport/PipeReviewReport.csproj 中添加项目引用。
AppModule 会被主程序自动扫描,无需额外注册。
检查清单
AppModule实现IAppModule,包含所有必要属性Key使用ConstKeys.SK_XXX常量- ViewModel 继承
ViewModelBaseEx - View 使用
DISource绑定 ViewModel,设置UserControlStyle - 主程序
.csproj已添加项目引用 - 输入框已显式
MaxLength="{x:Static shared:InputLimits.Path/Text}"