項目使用MVVM,建立了一個基類VMBasethis
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)); } } }
而後建立繼承類的時候,要寫一個屬性,比較麻煩spa
private Visibility _BtnOKV; public Visibility BtnOKV { get=>_BtnOKV; set { _BtnOKV=value; RaisePropertyChanged(); } }
折騰了一會文本模板發現不錯,好比下面的代碼,就能自動生成一個類,效率仍是蠻高的!debug
<#@ 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;} } }