Мы исследовали предоставленный образец, и похоже, что причиной является проблема совместимости между NotifyPropertyChanged
и Aggregatable
аспектами.
Если вы удалите или закомментируете атрибуты [Aggregatable]
, событие генерируется для свойства Enabled
, как и ожидалось. На самом деле, даже достаточно пометить свойство Wizard
как ссылку вместо родителя, чтобы исправить поведение NPC. Если свойство Wizard
не помечено как родительское, вам нужно будет указать правильное значение, установив свойство вручную.
Обратите внимание, что вам также необходимо добавить проверку имени свойства в методе OnPropertyChanged
, чтобы избежать бесконечного цикла «Wizard.Pages change» -> «Enabled updated» -> «Wizard.Pages changes» ...
[Aggregatable]
[NotifyPropertyChanged]
public class Page : INotifyPropertyChanged
{
//[Parent]
[Reference]
public Wizard Wizard { get; set; }
public string Name { get; set; }
public bool Valid { get; set; }
[SafeForDependencyAnalysis]
public bool Enabled
{
get
{
if ( Depends.Guard )
Depends.On( Wizard.Pages );
return Wizard.Pages
.TakeWhile( p => p != this )
.All( p => p.Valid );
}
}
public event PropertyChangedEventHandler PropertyChanged = delegate { };
void OnPropertyChanged( string propertyName )
{
PropertyChanged( this, new PropertyChangedEventArgs( propertyName ) );
if ( Wizard != null && propertyName != nameof( Enabled ) )
NotifyPropertyChangedServices.SignalPropertyChanged( Wizard, nameof( Wizard.Pages ) );
}
}
Мы продолжим изучение проблемы и обновим ответ, как только будет выпущено исправление.
ОБНОВЛЕНИЕ. Ошибка совместимости между аспектами NotifyPropertyChanged
и Aggregatable
была исправлена в PostSharp версии 6.0.29. Пожалуйста, обновите ваши пакеты NuGet до последней версии.