Fody est un "Weaver", c'est à dire qu'il va injecté du code par lien. Il est l'outil indispensable pour les développeurs C# MVVM (WPF/UWP/XAMARIN). Fody/PropertyChanged Injecte le code qui déclenche l'événement PropertyChanged dans les paramètres des propriétés des classes qui implémentent INotifyPropertyChanged.
Ainsi, nous sommes débarrassés de la quantité importante de code de "plomberie".
|
Toutes les classes qui implémentent l'interface INotifyPropertyChanged auront leurs propriétés modifiées par injection de code.
Avant :
public class Person : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public string GivenNames { get; set; }
public string FamilyName { get; set; }
public string FullName => $"{GivenNames} {FamilyName}";
}
Après :public class Person : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
string givenNames;
public string GivenNames
{
get => givenNames;
set
{
if (value != givenNames)
{
givenNames = value;
OnPropertyChanged(InternalEventArgsCache.GivenNames);
OnPropertyChanged(InternalEventArgsCache.FullName);
}
}
}
string familyName;
public string FamilyName
{
get => familyName;
set
{
if (value != familyName)
{
familyName = value;
OnPropertyChanged(InternalEventArgsCache.FamilyName);
OnPropertyChanged(InternalEventArgsCache.FullName);
}
}
}
public string FullName => $"{GivenNames} {FamilyName}";
protected void OnPropertyChanged(PropertyChangedEventArgs eventArgs)
{
PropertyChanged?.Invoke(this, eventArgs);
}
}
internal static class InternalEventArgsCache
{
internal static PropertyChangedEventArgs FamilyName = new PropertyChangedEventArgs("FamilyName");
internal static PropertyChangedEventArgs FullName = new PropertyChangedEventArgs("FullName");
internal static PropertyChangedEventArgs GivenNames = new PropertyChangedEventArgs("GivenNames");
}
Un wiki complet (en anglais) sur son utilisation est disponible.