乐于分享
好东西不私藏

使用T4模板将西门子的Pdf变量表生成ViewModel(CommunityToolkit.Mvvm框架)

使用T4模板将西门子的Pdf变量表生成ViewModel(CommunityToolkit.Mvvm框架)
1、安装 dotnet-t4 工具
dotnet tool install --global dotnet-t4 --version 3.0.0

2、安装必要的NuGet包

dotnet add package Mono.TextTemplating --version 3.0.0dotnet add package PdfPig --version 0.1.14-alpha-20251224-7c4f5

3、新建T4文件

4、导入Pdf第三方处理库及应用命名空间

<#@ template language="C#" #><#@ output extension=".cs" #><#@ import namespace="System"#><#@ import namespace="System.Collections.Generic" #><#@ assembly name="C:\Users\ping\RiderProjects\AvaloniaDemo\AvaloniaDemo\bin\Debug\net8.0\System.IO.Pipelines.dll" #><#@ assembly name="C:\Users\ping\RiderProjects\AvaloniaDemo\AvaloniaDemo\bin\Debug\net8.0\UglyToad.PdfPig.dll" #><#@ assembly name="C:\Users\ping\RiderProjects\AvaloniaDemo\AvaloniaDemo\bin\Debug\net8.0\UglyToad.PdfPig.Core.dll" #><#@ assembly name="C:\Users\ping\RiderProjects\AvaloniaDemo\AvaloniaDemo\bin\Debug\net8.0\UglyToad.PdfPig.Tokenization.dll" #><#@ assembly name="C:\Users\ping\RiderProjects\AvaloniaDemo\AvaloniaDemo\bin\Debug\net8.0\UglyToad.PdfPig.Tokens.dll" #><#@ assembly name="C:\Users\ping\RiderProjects\AvaloniaDemo\AvaloniaDemo\bin\Debug\net8.0\UglyToad.PdfPig.Fonts.dll" #><#@ import namespace="UglyToad.PdfPig" #><#@ import namespace="UglyToad.PdfPig.Content" #><#@ import namespace="System.IO" #><#@ import namespace="System.Linq" #><#@ import namespace="System.Text.RegularExpressions" #>

5、属性自动生成

<#           foreach (var varData in pdfFileInfo.ValidVarDatas)           {                   var dataType = varData.VarType;                  var fullPath = varData.FullPathName;                   doubles.Add(varData.Address);                   var s = varData.Address.ToString("F1");                   var strings=s.Split('.');                   var offset=int.Parse(strings[0]);                   var offsetBit=int.Parse(strings[1]);#>      [ObservableProperty]       private SiemensData _<#=fullPath#>=new()      {            DbIndex = <#=dbIndex#>,            DataType= "<#=dataType#>",            FullPath= "<#=fullPath#>",            Offset= <#=offset#>,            OffsetBit= <#=offsetBit#>,            PlcAddress=  string.Empty      }; <#           }#>

6、生成cs文件

t4 SiemenSviewmode.tt -o SiemensViewModel.cs

7、调用(AllocateDataOfByte函数自动分配值到对应的变量属性上

public partial class MainWindowViewModel : ViewModelBase{        public string Greeting { get; } = "Welcome to Avalonia!";        public SiemensViewModel SiemensViewModel { get; } = new SiemensViewModel();        publicMainWindowViewModel()        {                        byte[] bytes = [1,1,1,1,1,1,1,1];                SiemensViewModel.AllocateDataOfByte(19,0,bytes);        }}
<TextBlockText="{Binding SiemensViewModel.DB19_立库1_物料信息_物料信息111_物料编号.Value}"HorizontalAlignment="Center"VerticalAlignment="Center"/>

8、文件链接

Pdf链接:

通过网盘分享的文件:A4.pdf

链接: https://pan.baidu.com/s/1jY-nC5-yid_osYI1VekrIA 提取码: qvgh 

--来自百度网盘超级会员v8的分享

T4文件链接:

通过网盘分享的文件:SiemensViewMode.tt

链接: https://pan.baidu.com/s/18jQspuZC7FAI-El1oArC0w 提取码: hvvg 

--来自百度网盘超级会员v8的分享

生成的cs文件链接:

通过网盘分享的文件:SiemensViewModel.cs

链接: https://pan.baidu.com/s/1fsxWpUdpBookD5Hzgwjmzg 提取码: pu9t 

--来自百度网盘超级会员v8的分享

×
订阅图标按钮