Это известная проблема, полностью задокументированная здесь:
http://compositewpf.codeplex.com/WorkItem/View.aspx?WorkItemId=4925
Ошибка в CompositePresentationEvent <>. Subscribe () предотвращает слабые ссылки на события. Требуется заголовок
Описание Описание обязательно
ОБЗОР:
Метод Subscribe () этого класса задокументирован как создающий WeakReferences по умолчанию или если он указан как keepSubscriberReferenceAlive = false в перегрузках, которые включают этот параметр.
ОПИСАНИЕ:
Это поведение корректно наблюдается только при наличии делегата фильтра. Во всех других случаях (и всех перегрузках метода Subscribe ()) создается надежная ссылка - независимо от задокументированного значения по умолчанию и независимо от любого предоставленного значения для параметра keepSubscriberReferenceAlive.
Источник этой ошибки может быть найден в следующей перегрузке этого метода:
CompositePresentationEvent.Subscribe (Действие действия, ThreadOption threadOption, bool keepSubscriberReferenceAlive, Предикатный фильтр)
В этом методе проверяется параметр «фильтр». Если фильтр не равен нулю, обработка продолжается правильно. Однако если этот параметр имеет значение null, то для фильтра создается новый сквозной делегат (всегда возвращает значение true). Ошибка заключается в том, что объект DelegateReference, созданный из этого сквозного делегата, имеет параметр keepReferenceAlive, жестко запрограммированный в значение «true». Это значение не должно быть жестко запрограммировано, и вместо этого должен быть передан входящий параметр keepSubscriberReferenceAlive.
Временное решение:
Существует простой обходной путь для этой проблемы. При регистрации подписки вы всегда должны использовать подробную перегрузку, указанную выше, и всегда предоставлять делегат фильтра. Никогда не передавайте «ноль» для параметра фильтра. Если подписка не должна фильтроваться, тогда делегат сквозного фильтра следует использовать, когда требуется слабая ссылка на событие (типичный сценарий):
EventAggregator.GetEvent (). Subscribe (MyHandler, ThreadOption.
НЕТ обходного пути для следующих сокращенных перегрузок, и их не следует использовать, пока не будет исправлена основная ошибка:
CompositePresentationEvent.Subscribe (Действие действия)
CompositePresentationEvent.Subscribe (Действие действия, ThreadOption threadOption)
CompositePresentationEvent.Subscribe (Действие действия, bool keepSubscriberReferenceAlive)
CompositePresentationEvent.Subscribe (действие Action, ThreadOption threadOption, bool keepSubscriberReferenceAlive)