anjingyatou的专栏

T4模板基础就不在这里重复了,园子里有很多文章讲解T4模板。

今天给大家介绍一个实例 主要是针对WPF MVVM中Model的书写,

Model的格式大致是:

// 测试private string a;/// <summary>/// 测试/// <summary>public string A{get{return a;}set{if (a != value){a = value;this.RaisePropertyChanged("A");}}}在Model 类中一般都是重复性质的工作,,所有选择T4来生成该文件是个不错的选择。

生成model的核心代码如下:

BaseModelT4.tt

<#@ template language="C#" #><#@ assembly name="System.Core" #><#@ import namespace="System.Linq" #><#@ import namespace="System.Text" #><#@ import namespace="MVVMT4.models" #><#@ import namespace="System.Collections.Generic" #><#@ include file="BaseT4.tt" #><#foreach(ModelT4Model item in ModelT4OC) {#>// <#=item.Notes#>private <#=item.TypeName#> <#=Lower(item.PropertyName) #>;/// <summary>/// <#=item.Notes#>/// <summary>public <#=item.TypeName #> <#=Uppercase(item.PropertyName) #>{get{return <#=Lower(item.PropertyName) #>;}set{if (<#=Lower(item.PropertyName) #> != value){<#=Lower(item.PropertyName) #> = value;this.RaisePropertyChanged("<#=Uppercase(item.PropertyName) #>");}}}<#}#>BaseModelT4_P.cspublic partial class BaseModelT4{#region 字段private ObservableCollection<ModelT4Model> _ModelT4OC = new ObservableCollection<ModelT4Model>();#endregion#region 属性public ObservableCollection<ModelT4Model> ModelT4OC{get { return _ModelT4OC; }set { _ModelT4OC = value; }}#endregion}BaseT4.tt<#@ 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=".txt" #><#+public string Uppercase(string s){if(string.IsNullOrEmpty(s)){return string.Empty;}string notConvertS = s.Substring(1);string convertS=s.Substring(0,1);convertS = convertS.ToUpperInvariant();return convertS + notConvertS;}public string Lower(string s){if(string.IsNullOrEmpty(s)){return string.Empty;}string notConvertS = s.Substring(1);string convertS=s.Substring(0,1);convertS = convertS.ToLowerInvariant();return convertS + notConvertS;}#>ModelT4Model.cspublic class ModelT4Model : INotifyPropertyChanged{#region 字段private string _TypeName = string.Empty;private string _PropertyName = string.Empty;//注释private string _Notes = string.Empty;#endregion#region 属性public string TypeName{get { return _TypeName; }set{if (_TypeName != value){_TypeName = value;OnPropertyChanged("TypeName");}}}public string PropertyName{get { return _PropertyName; }set{if (_PropertyName != value){_PropertyName = value;OnPropertyChanged("PropertyName");}}}/// <summary>/// 注释/// </summary>public string Notes{get { return _Notes; }set{if (_Notes != value){_Notes = value;OnPropertyChanged("Notes");}}}#endregion#region 方法private void OnPropertyChanged(string propertyName){if (PropertyChanged != null){PropertyChanged(this, new PropertyChangedEventArgs(propertyName));}}#endregion#region 事件public event PropertyChangedEventHandler PropertyChanged;#endregion}源码下载

只要相信,期待就会成真

anjingyatou的专栏

相关文章:

你感兴趣的文章:

标签云: