依赖属性的编写纯属体力活,用代码来实现吧
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace GeneratePropdp
{
class Program
{
static void Main(string[] args)
{
var s= GenCode.GenPD<ClsModel>(new ClsModel());
Console.WriteLine(s);
s= GenCode.GenPD<ClsBB>(new ClsBB());
Console.WriteLine(s);
}
}
public class GenCode
{
private static string ClassTemplate = @"
public class ClassName:Screen
{
Code
}
";
private static string Template = @"
private Type _priFeild;
public Type Propp
{
get { return _priFeild; }
set
{
_priFeild = value;
NotifyOfPropertyChange(() => Propp);
}
}";
public static string GenPD<T>(T t)
{
var tType = t.GetType();
var PropInfos= tType.GetProperties();
StringBuilder sb = new StringBuilder();
foreach (var x in PropInfos)
{
if(x.CanWrite && x.CanRead)
{
var name = x.Name;
var propType = x.PropertyType.Name;
if (x.PropertyType.IsClass && !x.PropertyType.Namespace.StartsWith("System"))
{
propType = propType + "VM";
}
var priName = "_" + name.ToLower();
sb.Append(Template.Replace("Propp", name).Replace("Type", propType).Replace("_priFeild", priName));
}
}
return ClassTemplate.Replace("Code", sb.ToString()).Replace("ClassName",tType.Name+"VM");
}
}
public class ClsBB
{
public bool Enable { get; set; }
}
public class ClsModel
{
public string Aaaa { get; set; }
public ClsBB SN { get; set; } = new ClsBB();
}
}