全部,
我有一个 T4 模板,它生成样板代码来处理我的属性更改通知,并根据我分配给类的属性自动为我注册依赖属性。我使用 EnvDTE 在项目中上下移动并检索 ClassInfo 对象的 IEnumerable 来完成此操作。然后,我枚举 ClassInfo.Attributes 以检索具有我创建的某些自定义属性(即 INotifyPropertyChangedAttributeAttribute:System.Attribute)的 ClassInfo 对象,其中包含我需要让模板为我编写样板代码的所有相关信息。
现在,我的问题是,是否可以(使用 EnvDTE)检查可能从基类继承的接口实现(例如 INotifyPropertyChanged),这样我的类中就不会出现两个 PropertyChanged 事件(一个在继承的类和代码生成的部分类中的一个)?
例如:
public class vmBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged
protected override void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null) PropertyChanged(this, e);
}
}
[INotifyPropertyChangedAttribute(Test1, typeof(string))] //NOTE: By including this attribute, T4 template will automatically generate properties. What I need to know, though, is if the EnvDTE.ClassInfo can show Internface implementations as well so that I don't recreate the INotifyPropertyChanged Event
public partial class vm: vmBase //Implements INotifyPropertyChanged
{
//....
}
[INotifyPropertyChangedAttribute(Test2, typeof(string))]
public partial class SomeClassThatDoesNotImplementInotifyPropertyChangedAlready
{
//....
}
希望这有点道理。
有关使用 envDTE 和 T4 处理依赖属性注册的示例,请参见http://www.scottlogic.co.uk/blog/colin/2009/08/declarative-dependency-property-definition-with-t4-dte/ 。我的项目中的概念是相同的,只是我正在对其进行调整以处理 INotifyPropertyChanged 样板代码。
提前致谢。