[WPF 學習] 7 文本模板的應用

項目使用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;}
    }
}
相關文章
相關標籤/搜索