I\'m currently working on setting up a new project of mine and was wondering how I could achieve that my ViewModel classes do have INotifyPropertyChanged support while not h
It should definitely work.
I'd recommend first writing a base class that implements INotifyPropertyChanged, giving it a protected void OnPropertyChanged(string propertyName) method, making it cache its PropertyChangeEventArgs objects (one per unique property name -- no point in creating a new object every time the event is raised), and have your T4-generated class derive from this base.
To get the members that need properties implemented, you can just do something like:
BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
FieldInfo[] fieldsNeedingProperties = inputType.GetFields(flags)
.Where(f => f.Name.StartsWith("p_"))
.ToArray();
And go from there:
<# foreach (var field in fieldsNeedingProperties) { #>
<# string propertyName = GetPropertyName(field.Name); #>
public <#= field.FieldType.FullName #> <#= propertyName #> {
get { return <#= field.Name #>; }
set {
<#= field.Name #> = value;
OnPropertyChanged("<#= propertyName #>");
}
}
<# } #>
<#+
private string GetPropertyName(string fieldName) {
return fieldName.Substring(2, fieldName.Length - 2);
}
#>
And so on.