项目使用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;}
    }
}