欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

[WPF 学习] 7 文本模板的应用

程序员文章站 2022-11-22 09:58:30
项目使用MVVM,创建了一个基类VMBase 然后创建继承类的时候,要写一个属性,比较麻烦 折腾了一会文本模板发现不错,比如下面的代码,就能自动生成一个类,效率还是蛮高的! ......

项目使用mvvm,创建了一个基类vmbase

using system.componentmodel;
using system.runtime.compilerservices;

namespace ykcore.viewmodels
{
    public class vmbase : inotifypropertychanged
    {
        public event propertychangedeventhandler propertychanged;

        public void raisepropertychanged([callermembername]  string propertyname = "")
        {
            propertychanged?.invoke(this, new propertychangedeventargs(propertyname));
        }
    }
}

然后创建继承类的时候,要写一个属性,比较麻烦

        private visibility _btnokv;
        public visibility btnokv
        {
            get=>_btnokv;
            set
            {
                _btnokv=value;
                raisepropertychanged();
            }
        }

折腾了一会文本模板发现不错,比如下面的代码,就能自动生成一个类,效率还是蛮高的!

<#@ template debug="false" hostspecific="false" language="c#" #>
<#@ assembly name="system.core" #>
<#@ import namespace="system.linq" #>
<#@ import namespace="system.text" #>
<#@ import namespace="system.collections.generic" #>
<#@ output extension=".cs" #>
using system;
using system.windows;
using system.windows.media;

namespace ykcore.viewmodels
{
    public class vmmessagebox : vmbase
    {
<#
var strs=@"string tbicontext,tbmsgtext,tboffsettext
visibility imageqrcodev,btncancelv,btnokv
imagesource imageqrcodesource
bool btnokisdefault,btncancelisdefault"

.replace("\r\n","\r").split('\r');

foreach(var str in strs)
{
    var items=str.split(' ');
    foreach(var cname in items[1].split(','))
    {
        write(@$"
        private {items[0]} _{cname};
        public {items[0]} {cname}
        {{
            get=>_{cname};
            set
            {{
                _{cname}=value;
                raisepropertychanged();
            }}
        }}
        ");

    }
}
#>
        public vmcommand commands{get;set;}
    }
}